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.

Nota: il file di intestazione pthread.h deve essere il primo file incluso di ciascun file di origine che utilizza la libreria di thread. Altrimenti, utilizzare l'indicatore di compilazione -D_THREAD_SAFE o il compilatore cc_r utilizzato. In questo caso, l'indicatore viene impostato automaticamente.

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.