2012-08-04 8 views
7

ich lesen, wie unten einige Codes:Was ist die Verwendung von 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); 
} 

hier, was die Nutzung attrs als PTHREAD_CREATE_JOINABLE der Einstellung ist? Ist das nicht das Standardattribut eines Threads, der von pthead_create erstellt wurde?

Antwort

11

Ja, PTHREAD_CREATE_JOINABLE ist das Standardattribut. Der Zweck ist, dass Sie pthread_join auf dem Thread aufrufen können, das eine Funktion ist, die wartet, bis der Thread beendet wird, und Ihnen Rückgabewert gibt, wenn seine Hauptroutine ist.

Manchmal, wenn Sie einen Thread erstellen, um etwas Hintergrundarbeit zu tun, ist es vielleicht eine gute Idee, sicherzustellen, dass es beendet ist, bevor Sie seine Ergebnisse verwenden oder zu etwas anderem wechseln. Dafür gibt es verbindungsfähige Threads.

+0

+1 für genau zu sein, obwohl ich eine andere Erklärung bevorzuge 'es ist Ihnen erlauben, Ihre App leicht zu sperren, können Sie kontinuierlich zu erstellen/zu beenden/zu zerstören Threads in einer unkontrollierten Weise, ermöglichen Versuche, Thread-Mikro-Management funktioniert nicht, reduziert die Gesamtleistung und verhindert, dass Ihre App sofort oder gar nicht heruntergefahren wird ". –

3

Von POSIX-Spezifikation ist die Standardeinstellung des Attributs Trennen in einem neu initialisierten Threadattributobjekt tatsächlich PTHREAD_CREATE_JOINABLE. Siehe zum Beispiel http://linux.die.net/man/3/pthread_attr_setdetachstate Sie haben also Recht: Die Codezeile pthread_attr_setdetachstate ist in Ihrem Code-Snippet nicht erforderlich.

Verwandte Themen