操作系统中的互斥锁

Mutex in Operating System

在 c/c++ 中的控制台 input/output 时,互斥机制是否出现?

我的意思是,Console Stream 会被 Mutex 保护并以通常的方式被线程获取 locked/unlocked 吗?

是的,用 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********************