Soy nuevo en el enhebrado de Boost y estoy atascado con la forma en que la salida se realiza desde varios hilos. Tengo un impulso simple :: conteo de hilos de 9 a 1; el hilo principal espera y luego imprime "LiftOff .. !!"Enlazado de BOOST: comportamiento de 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;
}
El problema es que tengo que usar una "cout.flush()" explícita declaración en mi hilo para mostrar la salida. Si no uso flush(), solo obtengo "LiftOff !!" como la salida.
¿Podría alguien decirme por qué necesito usar flush() explícitamente?
Se comporta de la misma manera para mí con o sin 'flush()' (linux 3.0.6, gcc 4.5.3, boost 1.46). – delicateLatticeworkFever
FWIW, probé su programa en Win7x64 (MSVC10) e imprime los números sin vaciar(). ¿En qué plataforma lo pruebas? –
@KonradRudolph: "condiciones de carrera" no creará dos almacenamientos intermedios separados, que es la única explicación concebible de por qué el 'endl' en main no funciona después de esperar en un hilo unido. (sin mencionar: aquí no hay "condiciones de carrera", solo hay dos hilos y uno espera por el otro). – delicateLatticeworkFever