我是Boost线程的新手,我坚持如何从多个线程执行输出。 我有一个简单的boost :: thread从9减1;主线等待,然后打印“LiftOff .. !!”BOOST线程:cout行为
#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;
}
问题是我不得不在我的线程中使用显式的“cout.flush()”语句来显示输出。如果我不使用flush(),我只会得到“LiftOff !!”作为输出。
有人请告知为什么我需要明确使用flush()吗?
对于我来说,使用或不使用'flush()'(linux 3.0.6,gcc 4.5.3,boost 1.46)对我来说也是一样。 – delicateLatticeworkFever
FWIW,我在Win7x64(MSVC10)上测试了你的程序,并且它在没有flush()的情况下打印出数字。 Om你测试了哪个平台? –
@KonradRudolph:“竞争条件”不会创建两个单独的标准输出缓冲区,这是唯一可以想象的解释为什么在等待联接线程后main中的endl没有刷新。 (更不用说:这里根本就没有“竞争条件”,只有两个线程,另一个在等待。) – delicateLatticeworkFever