2009-06-30 85 views
6

從在pthread_join()手冊頁:我是否必須pthread_join創建每個線程?

When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until thread performs pthread_join on it. Therefore, pthread_join must be called once for each joinable thread created to avoid memory leaks.

這是否意味着我需要加入每個線程創建,以防止泄漏?但加入阻止呼叫者。

請解釋。

回答

8

你不需要需要加入一個線程,但它是一個好主意。在不調用pthread_join()的情況下,main()函數可能會在線程終止之前返回。在這種情況下,pthread_join()使應用程序等待,直到另一個線程完成處理。另外,當你加入這個線程時,它可以讓你有機會檢查返回值並確保一切順利,並且使你有機會清理你可能與線程共享的任何資源。

編輯:你可能感興趣的函數是pthread_detach()。 pthread_detach()允許線程終止後清理線程的存儲空間,因此不需要之後加入線程。

+2

您還可以使用pthread_attr_setdetachstate創建帶有PTHREAD_CREATE_DETACHED屬性的線程 – Hasturkun 2009-06-30 16:42:18

相關問題