Многопоточность BOOST: поведение cout

Я новичок в многопоточности Boost, и я застрял в том, как выполняется вывод из нескольких потоков. У меня есть простой boost::thread, обратный отсчет от 9 до 1; основной поток ждет, а затем печатает "LiftOff..!!"

#include <iostream>
#include <boost/thread.hpp>
using namespace std;

struct callable {
    void operator() ();
};

void callable::operator() () {
    int i = 10;
    while(--i > 0) {
        cout << "#" << i << ", ";
        boost::this_thread::yield();
    }
    cout.flush();
}

int main() {
    callable x;
    boost::thread myThread(x);

    myThread.join();

    cout << "LiftOff..!!" << endl;

    return 0;
}

Проблема в том, что я должен использовать явный оператор "cout.flush()" в своем потоке для отображения вывода. Если я не использую flush(), я получаю только "LiftOff!!" как выход.

Может ли кто-нибудь посоветовать, почему мне нужно явно использовать flush()?

5
задан Rajat 28 May 2012 в 12:09
поделиться