Sincronizando saída multi-thread do STD cout
Latelly Estou trabalhando com codificação multi-thread, depois de um tempo escrevendo, percebi que se eu usasse std :: cout em diferentes boost :: threads, a saída viria sem uma ordem lógica, o programa que estou testando é algo como:
#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;
}
E a saída geralmente é como (muda):
my02my01
my04
my03
LINHA EM BRANC
O fim
Com esse problema em mente, eu estava pensando em criar um único thread para gerenciar todas as saídas, para que elas estivessem em ordem como:
my01
my02
my03
my04
O fim
Qual é a melhor maneira de escrever esse segmento ou gerenciar essas saída
Leia também as respostas para esta pergunta: O cout é sincronizado / seguro para threads?
Ps: estou usando o Visual C ++ 2010 Express e minha CPU possui 8 núcleos diferente
Obrigado pelo seu tempo!