c++ cout 多线程

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

#include 
#include 
#include 
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;
}

运行结果:


c++ cout 多线程_第1张图片
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 lock(mu);
    cout << c << endl;
    //mu.unlock();
}

达到预期:


c++ cout 多线程_第2张图片
image.png

你可能感兴趣的:(c++ cout 多线程)