2016-09-29 44 views
0

我有一個使用pthreads的對象。它的構造函數創建了幾個線程。如果用正在運行的pthread刪除一個對象會發生什麼?

該類的析構函數在所有這些線程上調用pthread_join。

刪除過程中會發生什麼,如果沒有?也就是說,如果刪除操作符突然嘗試釋放對象,那麼未被終止的線程會發生什麼?

在此先感謝所有答覆。 :)

+0

在最好的情況下程序崩潰。如果沒有,它會在你的程序的內存中出現故障 – Hayt

回答

0

隨着連接,你的析構函數會阻塞,直到所有的連接線程退出。

pthread_join

的在pthread_join()函數等待由線程 指定來終止線程。如果該線程已經終止,則 pthread_join()立即返回。線程 指定的線程必須可以連接。

如果不加入線程,它們將繼續運行。這可能會產生各種後果,具體取決於是否調用未定義的行爲(例如,嘗試在析構函數從其中一個仍在運行的線程中退出後引用已刪除的對象)。

根據您的系統刪除pthread_t對象可能會產生影響(我不知道pthread的每個實現),但通常它們只是表示線程的底層系統對象的引用。因此,您將失去對該線程的引用,並可能無法在稍後加入,但該線程將繼續運行。

相關問題