最近我一直在使用多线程编码,写了一段时间后,我意识到如果我在不同的boost::threads中使用std::cout,输出将没有逻辑顺序。我正在测试的程序类似于:
#include <boost/thread/thread.hpp>
#include <iostream>
int my01( void )
{
std::cout << "my01" << std::endl;
return 0;
}
/* my02, my03 and my04 are the same with different outputs*/
[...]
int main( void )
{
boost::thread t1(&my01);
boost::thread t2(&my02);
boost::thread t3(&my03);
boost::thread t4(&my04);
while(!t1.joinable() || !t2.joinable() || !t3.joinable() || !t4.joinable());
t1.join();
t2.join();
t3.join();
t4.join();
std::cout << "The end!" << std::endl;
getchar();
return 0;
}
通常的输出结果如下所示(可能会发生变化):
my02my01
my04
my03
BLANK LINE
The end!
考虑到这个问题,我想创建一个单一的线程来管理所有的输出,以便它们按顺序排列,如下所示:
my01
my02
my03
my04
The end!
哪种是编写此类线程或管理这些输出的最佳方法?
请阅读本问题的答案:cout是否同步/线程安全?
附注:我使用Visual C++ 2010 Express,并且我的CPU有8个不同的内核。
感谢您的时间!