2010-09-21 23 views
49

Sto usando la libreria pthread per la creazione di & discussioni uniscono in C.indipendente vs. assemblabili thread POSIX

  1. Quando devo creare un thread come indipendente, fin dall'inizio? Offre un vantaggio in termini di prestazioni rispetto a un thread collegabile?

  2. È legale non eseguire un pthread_join() su un thread joinable (predefinito)? O dovrebbe mai usare una tale discussione la funzione detach() prima di pthread_exit() ing?

risposta

67
  1. creare un thread indipendente quando si sa che non si vuole aspettare che con pthread_join(). L'unico vantaggio in termini di prestazioni è che quando un thread separato termina, le sue risorse possono essere rilasciate immediatamente invece di dover attendere che il thread venga unito prima che le risorse possano essere rilasciate.

  2. È "legale" non partecipare a un thread collegabile; ma di solito non è consigliabile perché (come precedentemente notato) le risorse non saranno rilasciate fino a quando il thread non sarà unito, quindi rimarranno vincolati indefinitamente (fino alla chiusura del programma) se non ci si aggiunge.

+0

dubbio: in caso di thread separati, cosa succede se il thread principale termina l'esecuzione prima che il thread separato sia terminato? Penso che questo interromperebbe il processo uccidendo tutti i thread. Quindi, in quali scenari vengono utilizzati i thread distaccati perché dovrei essere sicuro che il thread separato ha terminato l'esecuzione? – Ajax

+0

@Ajax: Empiricamente, se il thread principale termina, il programma termina e i thread sono ... terminati. Questo, almeno, sembra essere il comportamento su Mac OS X (10.10.1 Yosemite). Non riesco a trovare nulla nella documentazione POSIX che indichi che altri thread continuano se 'exit()' o '_exit()' o '_Exit()' viene chiamato. Se il thread principale esegue 'pthread_exit()', allora gli altri thread avranno la possibilità di completare. –

+0

Su una nota diversa: i fili rimovibili fanno bene quando si dispone già di altri meccanismi di polling; è possibile utilizzare lo stesso meccanismo di polling per verificare lo stato dei risultati e quindi sapere se il thread è stato completato o meno. È un caso di "È pronto? Se è così, usalo". –