在函数体中静态定义的互斥量是否能够正确锁定?我目前在我的记录器系统中使用这种模式,但我还没有测试它的线程安全性。
void foo () {
static std::mutex mu;
std::lock_guard<std::mutex> guard(mu);
...
}
最佳答案
是的,这很好。函数第一次被调用时 mu
将被初始化(这保证是线程安全的并且只发生一次)然后 guard
将锁定它。如果另一个线程调用 foo 它将等待
std::lock_guard<std::mutex> guard(mu);
直到对 foo
的第一次调用完成并且 guard
被销毁并解锁 mu
。
关于c++ - 函数体中静态定义的互斥量是否能够正确锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233931/