Come spiegato nelle documentazioni openpub,
pthread_exit()
uscirà dal thread che lo chiama.
Nel tuo caso poiché il main lo chiama, main thread terminerà mentre i thread generati continueranno ad essere eseguiti. Questo è usato principalmente nei casi in cui il thread principale è richiesto solo per generare thread e lasciare che i thread facciano il loro lavoro
pthread_join
sospenderà l'esecuzione del thread che lo ha chiamato a meno che il thread di destinazione non termini
Questo è utile nei casi in cui vuoi aspettare che il thread/i termini prima di proseguire con l'elaborazione nel thread principale.
Entrambi i metodi assicurano che il tuo processo non termina prima che tutti i tuoi thread siano terminati.
Il metodo join ha il tuo thread del main
funzione attende esplicitamente che tutti i thread vengano "uniti".
Il pthread_exit
Il metodo termina il tuo main
funzione e filo in modo controllato. main
ha la particolarità di terminare main
altrimenti terminerebbe l'intero processo, inclusi tutti gli altri thread.
Perché funzioni, devi essere sicuro che nessuno dei tuoi thread utilizzi variabili locali dichiarate al loro interno main
funzione. Il vantaggio di questo metodo è che il tuo main
non deve conoscere tutti i thread che sono stati avviati nel tuo processo, ad esempio perché altri thread hanno essi stessi creato nuovi thread che main
non sa nulla di.
pthread_exit
termina il thread chiamante mentre pthread_join
sospende l'esecuzione del thread chiamante finché i thread di destinazione non completano l'esecuzione.
Sono praticamente ben spiegati in dettaglio nella documentazione del gruppo aperto:
- pthread_exit
- pthread_join