Синхронизация многопоточного вывода 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 разных ядер.

Спасибо за уделенное время!

Ответы на вопрос(5)

Ваш ответ на вопрос