2012-08-04 11 views
7

Ho letto alcuni codici come di seguito:Qual è l'utilizzo di PTHREAD_CREATE_JOINABLE in pthread?

void 
mcachefs_file_start_thread() 
{ 
    pthread_attr_t attrs; 
    pthread_attr_init(&attrs); 
    pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_JOINABLE); 
    pthread_create(&mcachefs_file_threadid, &attrs, mcachefs_file_thread, NULL); 
} 

Ecco, che cosa è l'utilizzo di impostazione attrs come PTHREAD_CREATE_JOINABLE? Inoltre, non è l'attributo predefinito di un thread creato da pthead_create?

risposta

11

Sì, PTHREAD_CREATE_JOINABLE è l'attributo predefinito. Lo scopo è che ti permette di chiamare pthread_join sul thread, che è una funzione che aspetta fino a quando il thread finisce e ti dà il valore di ritorno se la sua routine principale.

A volte, quando si crea una discussione per eseguire alcuni lavori in background, potrebbe essere una buona idea assicurarsi che sia terminata prima di utilizzare i risultati o passare a qualcos'altro. Ecco a cosa servono i thread univoci.

+0

+1 per la precisione, anche se preferisco una spiegazione diversa 'è per consentire di bloccare facilmente l'app, consentire di creare/terminare/distruggere continuamente i thread in modo incontrollato, consentire tentativi di microgestione dei thread che non funzionerà, ridurrà le prestazioni generali e impedirà l'arresto immediato della tua app o, addirittura, a tutti ". –

3

Dalla specifica posix, l'impostazione predefinita dell'attributo di stato di scollegamento in un oggetto attributi thread appena inizializzato è effettivamente PTHREAD_CREATE_JOINABLE. Vedere ad esempio http://linux.die.net/man/3/pthread_attr_setdetachstate Quindi hai ragione: la riga di codice pthread_attr_setdetachstate non è necessaria nello snippet di codice.

Problemi correlati