2012-08-04 38 views
7

我讀了一些代碼如下:pthread中PTHREAD_CREATE_JOINABLE的用法是什麼?

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); 
} 

這裏,什麼是設置attrsPTHREAD_CREATE_JOINABLE的使用情況如何?此外,是不是pthead_create創建的線程的默認屬性?

回答

11

是的,PTHREAD_CREATE_JOINABLE是默認屬性。其目的是允許你在線程上調用pthread_join,這是一個等待線程結束的函數,如果它的主例程給你返回值。

有時候,當你創建一個線程來做一些後臺工作時,在你使用它的結果或移動到別的東西之前,確定它已經完成可能是一個好主意。這就是可連接線程的用途。

+0

+1爲了準確,但我更喜歡不同的解釋,它允許您輕鬆鎖定您的應用程序,允許您以不受控制的方式不斷創建/終止/銷燬線程,允許嘗試線程微管理將無法正常工作,降低整體性能,並阻止您的應用程序及時或完全關閉。 – 2012-08-04 11:56:12

3

根據posix規範,新初始化的線程屬性對象中的detach state屬性的默認設置實際上是PTHREAD_CREATE_JOINABLE。 參見http://linux.die.net/man/3/pthread_attr_setdetachstate 所以你是對的:代碼片段中不需要pthread_attr_setdetachstate代碼行。

相關問題