BOOST线程:cout行为

Raj*_*jat 5 c++ boost boost-thread

我是Boost线程的新手,我不知道如何从多个线程执行输出.我有一个简单的boost :: thread从9倒数到1; 主线程等待然后打印"LiftOff .. !!"

#include <iostream>
#include <boost/thread.hpp>
using namespace std;

struct callable {
    void operator() ();
};

void callable::operator() () {
    int i = 10;
    while(--i > 0) {
        cout << "#" << i << ", ";
        boost::this_thread::yield();
    }
    cout.flush();
}

int main() {
    callable x;
    boost::thread myThread(x);

    myThread.join();

    cout << "LiftOff..!!" << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是我必须在我的线程中使用显式的"cout.flush()"语句来显示输出.如果我不使用flush(),我只会得到"LiftOff !!" 作为输出.

有人可以告诉我为什么需要明确使用flush()吗?

Ric*_*son 5

这不是特定于线程相关的,因为cout通常会在每个线程的基础上缓冲,只在实现决定时输出 - 所以在线程中输出只出现在特定于实现的基础上 - 通过调用flush你强制缓冲区到脸红了

这将因实现而异 - 通常是在一定数量的字符之后或发送新行时.

我发现多个线程写入相同的流或文件大多没问题 - 假设输出尽可能原子地执行.这不是我在生产环境中推荐的东西,因为它太难以预测了.