c++ - static lock_guard 和 static mutex 也一样吗?

标签 c++ multithreading locking c++14 mutex

所以我有一些线程不安全的函数调用,我需要使线程安全,所以我尝试使用 std::mutexstd::lock_guard。当前代码如下所示 -

int myFunc(int value){
    static std::mutex m;
    std::lock_guard lock(m);
    auto a = unsafe_call(value);
    return a;
}

unsafe_call() 是线程不安全的函数。我还在互斥锁周围放置了 static,因为这样函数对于每个单独的调用都会有不同的互斥锁。

我想知道的是,我是否也应该将 lock_guard 设为静态,因为互斥量是静态的,正如我的一些同事告诉我的那样。我不明白我为什么要这样做,因为我认为 lock_guard 是一个简单的 .lock().unlock() 打电话,但同事的建议让我感到困惑。

最佳答案

should I also make lock_guard static because the mutex is static one, as I was told by some coworker of mine.

你的同事完全错了,lock_guard 使用的是 RAII控制资源(在这种情况下为互斥锁)并使其成为静态的机制将完全违背它的目的——互斥锁将在函数第一次执行时被锁定一次,并且仅在程序终止时释放,即实际上你根本不会使用互斥锁。

关于c++ - static lock_guard 和 static mutex 也一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42233103/

相关文章:

c++ - 处理空格(或制表符)分隔的文件 "like"和数组 - C++

c++ - 将 MFC 对话框从 STA 更改为 MTA?

mongodb - 复用mongo内部分布式锁

SQL Server - 如何将(nolock)提示设置为默认值?

c++ - 如何使用二维阵列打印电路板?

C++:从打印机读取数据

vb.net - 运行后台线程以加快执行时间的 WCF 服务

python - 防止类在 Python 中直接实例化

c++ - 为什么我在编译 OpenVino 示例时遇到此错误

未捕获 Python SIGINT