我意识到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;
}
答案 0 :(得分:3)
要真正将此限制为现代C ++样式的文件范围:
namespace {
mutex my_mutex;
<information to protect goes here>
}
然后答案是,“是的,这是安全的”。
但是,在您的情况下,您似乎正在尝试保护std :: cout。由于cout不限于你的文件范围,你的互斥锁不会有太大的好处,除非你能保证这是整个程序中cout和/或cerr的唯一使用。