Sottoroutine pthread_join o pthread_detach
Finalità
Blocca o scollega il thread chiamante fino al termine del thread specificato.
Libreria
Libreria thread (libpthreads.a)
Sintassi
#include <pthread.h>
int pthread_join (thread, status)
pthread_t thread;
void **status;
int pthread_detach (thread)
pthread_t thread;Descrizione
La sottoroutine pthread_join blocca il thread chiamante fino a quando il thread thread non termina. Lo stato di terminazione del thread di destinazione viene restituito nel parametro status .
Se il thread di destinazione è già terminato, ma non ancora scollegato, la sottoroutine viene restituita immediatamente. Non è possibile unire un thread scollegato, anche se non è ancora terminato. Il thread di destinazione viene automaticamente scollegato dopo che tutti i thread uniti sono stati riattivati.
Questa sottoroutine non causa la chiusura di un thread. Agisce come la sottoroutine pthread_cond_wait per attendere una condizione particolare.
La sottoroutine pthread_detach viene utilizzata per indicare all'implementazione che la memoria per il thread il cui ID thread si trova nell'ubicazione thread può essere recuperata quando il thread termina. Questa memoria deve essere recuperata all'uscita del processo, indipendentemente dal fatto che il thread sia stato scollegato o meno e può includere la memoria per il valore di ritorno thread . Se thread non è stato ancora terminato, pthread_detach non ne causerà la chiusura. Più chiamate pthread_detach sullo stesso thread di destinazione causano errori.
Parametri
| Elemento | Descrizione |
|---|---|
| thread | Specifica il thread di destinazione. |
| stato | Indica dove verrà memorizzato lo stato di terminazione del thread di destinazione. Se il valore è NULL, lo stato di terminazione non viene restituito. |
Valori di ritorno
Se l'operazione ha esito positivo, la funzione pthread_join restituisce zero. Altrimenti, viene restituito un numero di errore per indicare l'errore.
Codici di errore
Le funzioni pthread_join e pthread_detach avranno esito negativo se:
| Elemento | Descrizione |
|---|---|
| INVAL | L'implementazione ha rilevato che il valore specificato dal sottoprocesso non fa riferimento ad un sottoprocesso unibile. |
| ESRCH | Non è stato trovato alcun thread corrispondente a quello specificato dall'ID thread fornito. |
La funzione pthread_join avrà esito negativo se:
| Elemento | Descrizione |
|---|---|
| EDEADLK | Il valore del thread specifica il thread chiamante. |
La funzione pthread_join non restituirà un codice di errore EINTR.