首页 > 解决方案 > 在函数体中静态定义的互斥锁是否能够正确锁定?

问题描述

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

void foo () {
    static std::mutex mu;
    std::lock_guard<std::mutex> guard(mu);
    ...
}

标签: c++multithreadingthread-safetymutexstatic-variables

解决方案


是的,这很好。第一次调用该函数时mu将被初始化(这保证是线程安全的并且只发生一次),然后guard将其锁定。如果另一个线程调用 foo 它将等待

std::lock_guard<std::mutex> guard(mu);

直到第一次调用foo完成并被guard销毁解锁mu


推荐阅读