c++ cout 多线程

c++多线程复习想看看线程执行顺序。

#include <thread>
#include <iostream>
#include <mutex>
using namespace std;
mutex mu;
void test(char c)
{
    cout << c << endl;
}
int main()
{
    thread t1(test, 'A');
    thread t2(test, 'B');
    t1.join();
    t2.join();
    return 0;
}

运行结果:


image.png

发现结果连到一块了,还多出一个空行。显然test函数中cout不是多线程安全的,导致输出乱序,需要自己处理同步。

方法一:使用printf替代cout

void test(char c)
{
    //cout << c << endl;
    printf("%c\n", c);
}

方法二:加锁

void test(char c)
{
    mu.lock();
    cout << c << endl;
    mu.unlock();
}

上面加锁方式不安全,如果输出那行出现异常则导致无法解锁,所以可以用更优方式:

void test(char c)
{
    //printf("%c\n",c);
    //mu.lock();
    unique_lock<mutex> lock(mu);
    cout << c << endl;
    //mu.unlock();
}

达到预期:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容