所以我有一些线程不安全的函数调用,我需要使线程安全,所以我尝试使用 std::mutex
和 std::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/