2012-02-20 9 views
11

Para mi clase se supone que debo averiguar lo que está mal con una pieza de código, y la parte que estoy teniendo problemas para descifrar es¿Qué significa "unirse" a un hilo?

// joining a thread blocks until that thread finishes 
a.join(); 
b.join(); 

se une a un hilo de la misma como el bloqueo de un hilo? Porque creo que el objetivo de esta tarea es que no deberías dejar los hilos desbloqueados.

Respuesta

30

¡Así es como un hilo espera la finalización de otro hilo!

Un caso de uso agradable de join es - decir, por ejemplo, la función de main()/hilo crea un hilo y no espera (usando join) para el hilo creado para completar y simplemente sale, entonces el hilo de nueva creación también se detendrá !

Aquí hay un nice explanation de Gestión de subprocesos en general y Subproceso Únete en particular! Y aquí hay algunos code snippets que muestran algunos casos de uso de join y ¡qué sucede cuando no lo usa!

+0

¡Muy buen enlace para la explicación! –

+0

excelente enlace, gracias! – Dimesio

5

El comentario lo dice todo, de verdad. Unirse a un hilo significa esperar a que se complete. Es decir, bloquea el hilo actual hasta que se complete otro.

3

Creo que iniciar un hilo "bifurca" el proceso en dos hilos de ejecución distintos. Entonces, unirse es al revés: es donde estos dos hilos separados se unen (y solo el padre continúa desde allí).

3

Unir un hilo significa esperar hasta que el hilo esté activo. Cuando el hilo sale, el hilo que llama al join() continuará ejecutándose. Por lo tanto, en el ejemplo anterior, el hilo (presumiblemente hilo principal) que llama a a.join() y b.join() esperará hasta que ambos hilos a y b (en ese orden) finalicen su trabajo y luego continúen ejecutando el código que está después de b.join().

2
  1. join() espera en un hilo para completar su ejecución.
  2. Necesita separar() un hilo o unir() un hilo para gestionarlo.
  3. join() también limpia los recursos de hilos ocupados. Encontrarás join() invocado en el destructor de una clase RAII por el mismo motivo.