c++ - 函数体中静态定义的互斥量是否能够正确锁定?

标签 c++ multithreading thread-safety mutex static-variables

在函数体中静态定义的互斥量是否能够正确锁定?我目前在我的记录器系统中使用这种模式,但我还没有测试它的线程安全性。

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/

相关文章:

通过 JNI/C++ 调用时未找到 Java 方法

c++ - 无法正确创建线程

c++ - 静态对象的同步

multithreading - Boost Asio是否按顺序调用异步处理程序

multithreading - Delphi应用程序中的定期任务

c++ - 如何获取进程中使用的 .DLL 的(物理)基地址?

c++ - 类模板 cpp、hpp、cpp

c++ - 将 volatile C 字符串与 std::cout 一起使用

iphone - 如何在代码块中通过引用使用变量?

c# - 从 GTK#Thread 访问 System.Drawing.Bitmap 抛出 Object Currently in use elshere 异常