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!

questionAnswers(10)

yourAnswerToTheQuestion