Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

308
Views
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 answers
Answer question

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 Report

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 Report

0

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

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!