Synchronizing STD cout output multi-thread

Latelly He estado trabajando con la codificación de subprocesos múltiples, después de un tiempo escribiendo me di cuenta de que si usaba std :: cout en diferentes subprocesos de boost ::, la salida vendría sin un orden lógico, el programa que estoy probando es 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;
}


Y la salida suele ser como (cambia):

my02my01
my04
my03
LINEA EN BLANC
¡El fin

Con este problema en mente, estaba pensando en crear un solo subproceso para administrar todas las salidas, por lo que estarían en orden como:

my01
my02
my03
my04
¡El fin

Cuál es la forma óptima de escribir ese hilo o de gestionar esas salidas?
Lea también las respuestas a esta pregunta:Está sincronizado / seguro para subprocesos?

Ps: estoy usando Visual C ++ 2010 Express y mi CPU tiene 8 núcleos diferentes.

¡Gracias por tu tiempo

Respuestas a la pregunta(10)

Su respuesta a la pregunta