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()吗?
这不是特定于线程相关的,因为cout通常会在每个线程的基础上缓冲,只在实现决定时输出 - 所以在线程中输出只出现在特定于实现的基础上 - 通过调用flush你强制缓冲区到脸红了
这将因实现而异 - 通常是在一定数量的字符之后或发送新行时.
我发现多个线程写入相同的流或文件大多没问题 - 假设输出尽可能原子地执行.这不是我在生产环境中推荐的东西,因为它太难以预测了.
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |