Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

307
Vistas
Bloqueo en pthread_join()

Según la página del manual:

La función pthread_join() suspenderá la ejecución del subproceso de llamada hasta que finalice el subproceso de destino, a menos que el subproceso de destino ya haya terminado.

Entonces, según tengo entendido, el proceso de llamada se bloqueará hasta que salga el hilo especificado.

Ahora considere el siguiente código:

 pthread_t thrs[NUMTHREADS]; for (int i = 0; i < NUMTHREADS; i++) { pthread_create(&thrs[i], NULL, thread_main, NULL); } pthread_join(thrs[0], NULL); /* will be blocked here */ pthread_join(thrs[1], NULL); pthread_join(thrs[2], NULL); /* ... */ pthread_join(thrs[NUMTHREADS - 1], NULL);

El subproceso de llamada se bloqueará en la llamada a pthread_join(thrs[0], NULL) , hasta thrs[0] salga de alguna manera. Pero, ¿cómo si otro hilo, por ejemplo, thrs[2] llama a pthread_exit() mientras estamos bloqueados en la llamada a pthread_join(thrs[0], NULL) ? ¿Tenemos que esperar a que thrs[0] salga para recibir el valor de retorno de thrs[2] ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Pero, ¿cómo si otro hilo, digamos thrs[2] sale mientras estamos bloqueados en la llamada a pthread_join(thrs[0], NULL)?

Sí, podría pasar. En ese caso, pthread_join(thrs[2], NULL); regresará inmediatamente.

¿Tenemos que esperar a que thrs[0] salga para recibir el valor de retorno de thrs[2]?

Sí, debe esperar a que thr[0] finalice.


(No directamente relacionado con la pregunta)

No es necesario llamar a pthread_join() en cada subproceso que cree. Es una función conveniente para obtener el estado de retorno de los hilos. Si no necesita saber el estado de finalización del hilo, puede crear el hilo al ver el atributo "separado" o llamar a pthread_detach(pthread_self()); del propio hilo para que se desprenda. En algunos casos, desearía que los subprocesos creados continuaran con la ejecución, pero ya no necesitarían el subproceso principal . En ese caso, podría llamar a pthread_exit(NULL); del subproceso principal que permitirá que otros subprocesos continúen incluso después de que finalice el subproceso principal.

over 4 years ago · Santiago Trujillo Denunciar

0

Sí, el subproceso principal bloqueado en thrs[0] no obtendrá el resultado de thrs[2] hasta después de thrs[[0] y thrs[1] también hayan salido.

Si necesita más flexibilidad, una opción es hacer algo como que los subprocesos publiquen sus resultados en una cola o señalen de alguna otra manera que el subproceso debe unirse. El subproceso principal puede monitorear esa cola/señal y obtener los resultados necesarios (que podrían provenir de un pthread_join() que se realiza en el subproceso que se sabe que se completó a partir de la información en la cola/señal).

over 4 years ago · Santiago Trujillo Denunciar

0

Sí. El código se ejecuta en serie.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda