microsoft - visual c++
¿Los hilos secundarios se cierran cuando el hilo primario termina? (3)
Dado que C y C ++ ordenan que al regresar de la función main
eliminen todos los subprocesos en ejecución , sí, el proceso debería haberse ido. Y dado que ese comportamiento lo realiza el tiempo de ejecución, la situación debería ser la misma en Linux.
Estaba haciendo algo de programación multiproceso en Visual studio C ++ usando las llamadas beginthreadex, endthreadex.
Creo un hilo hijo thread1. El subproceso secundario se ejecuta en una función que nunca sale, ya que tiene un bucle infinito. Ahora, si el subproceso principal termina con un error o finaliza correctamente, ¿también se cierra el subproceso secundario? Mi duda es: ¿existe alguna situación en la que el subproceso secundario esté vivo incluso después de que se cierre el programa principal?
Para Linux, ¿cómo debería ser este caso?
No hay una relación padre / hijo entre los hilos. Si el hilo A crea el hilo B y luego el hilo A termina, entonces el hilo B continuará ejecutándose.
La excepción a esto es cuando el hilo principal (es decir, el hilo que ejecuta la función main()
) termina. Cuando esto sucede, el proceso termina y todos los otros subprocesos se detienen.
Tan pronto como su proceso muere, se liberan todos los recursos (memoria, archivos y subprocesos)
La forma correcta de hacer esto: cuando llama a thread inicial, mantenga el identificador devuelto en el hilo primario y llame a WaitForObject antes de abandonar el programa (nos unimos al hilo primario con el hilo secundario).
El hilo padre se bloqueará hasta que el hilo hijo termine. Si el subproceso de su hijo tiene un bucle infinito, podría definir un "punto de interrupción" y verificar si debería salir. Por ejemplo, utilizando una variable booleana compartida. Compruebe Interrumpir Politely fro más información.