RAII 使用 std::lock_guard<std::mutex>(m_mutex) 锁定;而不是 std::lock_guard<std::mutex> lk(m_mutex);

问题描述 投票:0回答:1

这可能是一个愚蠢的问题,但我发现了一些没有变量的 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 变量实际上是不需要的?

c++ locking thread-synchronization
1个回答
0
投票

下面的代码告诉你为什么它是错误的:

#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
© www.soinside.com 2019 - 2024. All rights reserved.