Синхронизация многопоточного вывода STD cout
В последнее время я работал с многопоточным кодированием, через некоторое время я понял, что если бы я использовал std :: cout в разных boost :: threads, то вывод получился бы без логического порядка, программа, которую я тестирую, что-то вроде:
#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
ПУСТАЯ СТРОКА
Конец!
Имея в виду эту проблему, я думал о создании единого потока для управления всеми выходными данными, чтобы они были в следующем порядке:
my01
my02
my03
my04
Конец!
Каков оптимальный способ написать такой поток или управлять этими результатами?
Пожалуйста, прочитайте ответы на этот вопрос тоже:Является ли cout синхронизированным / поточно-ориентированным?
PS: я использую Visual C ++ 2010 Express и мой процессор имеет 8 разных ядер.
Спасибо за уделенное время!