c++ - 操作系统中的互斥量

标签 c++ c operating-system 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/

相关文章:

javascript - 检测操作系统(XP 与 7)

linux - PCB存放在内存中的什么位置

c++ - 函数指针数组作为参数

c - gcc: 警告: 'used' 属性被忽略

c - 使用 GCC "-Wextra"选项编译时如何初始化 C 结构而不产生警告?

c - 编译cuda项目出错

c++ - c/c++ 指针的内存地址保存在哪里?

c++ - 实现嵌套链表(list of lists)

c++ - 模板成员函数的部分模板规范禁用带有模板参数的类实例化

c++ - 当我初始化 C++ 容器(例如 std::list)时,是否调用了复制构造函数?