В последнее время я работал с многопоточным кодированием, после некоторого времени написания я понял, что если бы я использовал std :: cout в разных boost :: thread вывод будет без логического порядка, программа, которую я тестирую, выглядит примерно так:
#include
#include
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 разных ядер.
Спасибо за уделенное время!