【发布时间】:2012-03-09 02:09:09
【问题描述】:
最近我一直在使用多线程编码,写了一段时间后我意识到如果我在不同的 boost::threads 中使用 std::cout,输出将没有逻辑顺序,我的程序m 测试类似于:
#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
我的04
我的03
空白线
结束!
考虑到这个问题,我正在考虑创建一个线程来管理所有输出,因此它们的顺序如下:
我的01
我的02
我的03
我的04
结束!
编写此类线程或管理这些输出的最佳方式是什么?
也请阅读此问题的答案:Is cout synchronized/thread-safe?
Ps:我使用的是 Visual C++ 2010 Express,我的 cpu 有 8 个不同的内核。
感谢您的宝贵时间!
【问题讨论】:
-
我有完全相同的问题,但我无法控制使用 boost::threads 的代码,所以对我来说,下面发布的解决方案不是一个选项。如何在不重写 boost::thread 的使用的情况下管理输出同步性?
标签: c++ multithreading synchronization cout