2012-01-05 1 views

risposta

9

due motivi che mi vengono in mente: pthread_exit

  1. permette di uscire da un filo qualsiasi profondità nello stack di chiamate.

  2. Must be called on the main thread if the TLS keys for the main thread are to have their free functions called. E anche qui:. "Eventuali funzioni di pulizia di annullamento che sono stati spinti e non ancora spuntato vengono estratti in ordine inverso che sono state spinte e poi eseguito dopo tutti i gestori di cancellazione di pulizia sono stati eseguiti, se il thread ha dati specifici del thread, le funzioni di distruttore appropriate verranno chiamate in un ordine non specificato ... Una chiamata implicita a pthread_exit() viene eseguita quando un thread diverso dal thread in cui main() è stato richiamato per la prima volta restituisce dalla routine di avvio che è stato utilizzato per crearlo.Il valore di ritorno della funzione funge da stato di uscita del thread. "

+1

Non concordo. In questi due casi, pthread_exit può ancora essere sostituito dal reso. –

+3

Per il numero 1, sì, ma potrebbe non essere conveniente farlo. Per il n. 2, non può. Vedi il link che ho postato. Mi sono imbattuto in questo nel mondo reale di recente. –

+4

@Mengfei: 'pthread_exit()' può essere sostituito da 'return' solo se sei nella funzione avviata da' pthread_create() '. Se il thread è più profondo in una funzione stack di chiamate, 'return' non farà la stessa cosa. –

3

Se avete intenzione di chiamare pthread_exit un'interfaccia duplicato, allora si dovrebbe anche chiamare exit() un'interfaccia duplicato, dal momento che si potrebbe uscire dal programma in un punto arbitrario. Probabilmente vuoi chiamare lo pthread_exit() quando hai qualche tipo di errore in cui semplicemente non puoi continuare. Oppure, in alternativa, hai trovato il valore che stai cercando all'interno del thread.

quanto per la sua reale esistenza, secondo il documentation:

Una chiamata implicita a pthread_exit() è fatto quando un thread diverso dal thread in cui main() è stata invocata prima ritorna dalla routine dall'inizio è stato usato per crearlo. Il valore di ritorno della funzione funge da stato di uscita del thread.

Quindi, se hai fatto un return <some pointer> dal thread, o semplicemente raggiunto la fine, pthread_exit() sarebbe stato chiamato in ogni caso. È lo stesso con l'uscita da main(), se si sta chiamando return 0 in realtà exit(0). La funzione deve esistere, altrimenti il ​​kernel non avrebbe un modo per determinare se il thread è terminato.