Sono nuovo di Boost per il threading e sono bloccato con il modo in cui l'output viene eseguito da più thread. Ho un semplice boost :: thread count down down da 9 a 1; il thread principale attende e quindi stampa "LiftOff .. !!"Filettatura BOOST: comportamento cout
#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;
}
Il problema è che devo usare un "cout.flush()" esplicita dichiarazione nel mio thread per visualizzare l'output. Se non uso flush(), ottengo solo "LiftOff !!" come l'output.
Qualcuno potrebbe consigliare perché ho bisogno di usare flush() esplicitamente?
Si comporta allo stesso modo per me con o senza 'flush()' (linux 3.0.6, gcc 4.5.3, boost 1.46). – delicateLatticeworkFever
FWIW, ho testato il tuo programma su Win7x64 (MSVC10), e stampa i numeri senza flush(). Om quale piattaforma testate? –
@KonradRudolph: "race condition" non creerà due buffer stdout separati, che è l'unica spiegazione plausibile per cui il file 'endl' in main non si svuota dopo aver atteso un thread congiunto. (per non parlare: non ci sono "condizioni di gara" qui, ci sono solo due thread e uno attende dall'altro.) – delicateLatticeworkFever