Синхронизация многопоточного вывода cout в STD

В последнее время я работал с многопоточным кодированием, после некоторого времени написания я понял, что если бы я использовал 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 разных ядер.

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

6
задан Community 23 May 2017 в 12:32
поделиться