2009-11-06 76 views
8

比方說我:pthread可以自行執行清理嗎?

  • malloc一個pthread_t用於保存線程上下文

  • pthread_create與作爲用戶參數的指針pthread_t結構

換句話說,螺紋功能可以訪問其pthread_t上下文結構。現在這裏是棘手的位:

pthread如何退出它自己並得到pthread_t上下文以某種方式釋放?是否有可能不是涉及父線程? (無互斥/連接等)

將此視爲「輕量級過程」。

(沒有線程不能free()結構只是在退出之前其thread_func

回答

10

pthread_t您收到創建線程時,僅僅是它的ID,用於從其他線程指的是線程。

當線程終止時,要自動釋放線程上下文,您應該使用pthread_detach()

將其從父線程分離如果您將指針傳遞給pthread_t(從初始pthread_create(),你可以簡單地在free()它立即在新線程的啓動例程。如果您需要再次參考當前線程的pthread_t值,請致電pthread_self()。然而,在父線程的堆棧上分配pthread_t要容易得多,並且根本不必費力地將它傳遞給子線程(或者傳遞更有用的東西)。

void *child_routine(void *arg) 
{ 
    pthread_t thread = pthread_self(); 
} 

void parent() 
{ 
    pthread_t thread; 
    pthread_create(&thread, NULL, child_routine, NULL); 
    pthread_detach(thread); 
} 
+0

@Anacrolix:謝謝!我感到非常愚蠢:我應該檢查頭文件('typedef unsigned long int pthread_t;')。 – jldupont 2009-11-06 17:26:00

+1

我只是感謝人們提出有關體面的平臺和語言的實際問題:) – 2009-11-06 23:43:16

+1

@jldupont:'pthread_t'可以是指針或結構。 – 2010-06-09 12:06:14