在文件范围声明互斥锁是否安全?

时间:2015-03-25 21:39:14

标签: c++ multithreading c++11

我意识到this question是类似的,但我并不特定于Windows。

在文件范围内声明互斥锁是安全且好的形式吗?

#include <iostream>
#include <mutex>
#include "Logger.h"

mutex my_mutex;

void Logger::log()
{
    lock_guard<mutex> lock(my_mutex);
    for (int i = 0; i < 29; ++i)
    {
        cout << i << " ";
    }
    cout << endl;
}

1 个答案:

答案 0 :(得分:3)

要真正将此限制为现代C ++样式的文件范围:

namespace {
   mutex my_mutex;
   <information to protect goes here>
}

然后答案是,“是的,这是安全的”。

但是,在您的情况下,您似乎正在尝试保护std :: cout。由于cout不限于你的文件范围,你的互斥锁不会有太大的好处,除非你能保证这是整个程序中cout和/或cerr的唯一使用。