<分区>
在c/c++的Console输入/输出的时候有Mutex机制吗?
我的意思是,Console Stream 会被 Mutex 保护并以通常的方式被线程锁定/解锁吗?
<分区>
在c/c++的Console输入/输出的时候有Mutex机制吗?
我的意思是,Console Stream 会被 Mutex 保护并以通常的方式被线程锁定/解锁吗?
最佳答案
是的,用 std::mutex
包装输出将确保不同的线程不会同时访问流。与 stdio 同步时对 cout
的单独调用(默认行为)是安全的,尽管无法保证来自多个线程的字符的插入顺序。
考虑
#include <iostream>
#include <mutex>
#include <thread>
std::mutex mx;
void print(char ch, int count)
{
std::lock_guard<std::mutex> lock(mx);
for (int i = 0; i < count; ++i)
{
std::cout << ch;
}
std::cout << std::endl;
}
int main() {
std::thread t1(print, 'x', 10);
std::thread t2(print, '*',20);
t1.join();
t2.join();
return 0;
}
有了互斥量,输出是(live example):
xxxxxxxxxx
********************
如果没有互斥量,一种可能的输出是(live example):
xxxxxxxxxx********************
关于c++ - 操作系统中的互斥量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323669/