美文网首页
c++ cout 多线程

c++ cout 多线程

作者: 胖子罗 | 来源:发表于2020-03-31 11:00 被阅读0次

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

相关文章

  • c++ cout 多线程

    c++多线程复习想看看线程执行顺序。 运行结果: 发现结果连到一块了,还多出一个空行。显然test函数中cout不...

  • 多线程中如何安全的使用std::cout

    问题描述 在C++多线程编程中,开发者往往使用cout来打印一些信息,但是往往被人忽略的是,cout在使用时可能会...

  • C++ 基础语法

    cin cout C++ 中常使用 cin 、 cout 进行控制台的输入、输出 cin 用的右移运算符 cout...

  • c++输入输出提速

    C++的cin和cout取消同步:

  • C++疑难杂症

    as cout is present in the C++ standard library, which wou...

  • c++输出

    c++输出(调整cout输出进制width()函数的使用) 引用c++primer plus 一书 调整cout输...

  • C++ Primer备忘

    第I部分 C++基础 cin和cout的箭头方向cin指向变量,输出指向cout /*和*/采用就近匹配原则,因此...

  • C++相关知识点

    C++输入输出: string name;int age;cout << "输入名字:";cin >> name>...

  • C++学习

    作者网页 Overview of C++ Fisrt Program 标识符cout表示console outpu...

  • MarkDown语法练习

    c++ 吃饭 睡觉 引用的内容 粗体 斜体 #include void main() { cout<<"hel...

网友评论

      本文标题:c++ cout 多线程

      本文链接:https://www.haomeiwen.com/subject/nttwuhtx.html