这可能是一个愚蠢的问题,但我发现了一些没有变量的 lock_guard 的出现。
void func() {
std::lock_guard<std::mutex>(m_mutex);
m_value = "2";
}
而不是下面的 lk 变量。
void func() {
std::lock_guard<std::mutex> lk(m_mutex);
m_value = "2";
}
第一个版本可能是废话,导致访问处于某种软同步模式,因为锁定被保持很短的时间,所以当前不再运行的函数持有锁定,对吗?
或者我在这里学到了一些东西,而 lk 变量实际上是不需要的?
下面的代码告诉你为什么它是错误的:
#include <iostream>
struct raii_class
{
raii_class()
{
std::cout << "raii construct\n";
}
~raii_class()
{
std::cout << "raii destruct\n";
}
};
int main()
{
raii_class{};
std::cout << "body\n";
return 0;
}
输出:
raii construct
raii destruct
body