curso de la vida del objeto boost::thread
y la vida útil del hilo nativo no están relacionados. El objeto boost::thread
puede salir del alcance en cualquier momento.
De la clase boost::thread
documentation
Así como el tiempo de vida de un archivo puede ser diferente del tiempo de vida de un objeto iostream que representa el archivo, el tiempo de vida de un hilo de ejecución pueden ser diferentes de la rosca objeto que representa el hilo de ejecución. En particular, después de una llamada para unirse a(), ya no existirá el hilo de ejecución aunque el objeto hilo continúa existiendo hasta el final de su vida útil normal. Lo contrario también es posible; si un objeto de hilo se destruye sin que se haya llamado primero a join(), el hilo de ejecución continúa hasta que se completa su función inicial.
Editar: Si sólo tiene que iniciar un hilo y nunca invocar join
, puede utilizar el constructor de la rosca como una función:
// Launch thread.
boost::thread(&do_work);
Sin embargo, yo no sugiero que haga que , incluso si crees que estás seguro de que el hilo se completará antes de que main()
lo haga.
¿Por qué crear dinámicamente el hilo? –
@ Martin York: Porque no quiero objeto hilo a ser destruido después de salir del ámbito de la variable. – itsvetkov
Pero si lo deja caer fuera del alcance, entonces no puede acceder a él (y por lo tanto tiene fugas). El hecho de no tener acceso significa que no se puede hacer nada con él y el hilo de ejecución real sigue vivo de todos modos, por lo que parece inútil. Nota: Prácticamente ** NUNCA ** debes tener un puntero RAW así. –