1. 程式人生 > >pthread_join 兩次同一個執行緒

pthread_join 兩次同一個執行緒

現象:我先建立兩個執行緒 A和B,將其執行緒ID儲存下來。 然後依次pthread_join 這兩個執行緒。然後建立一個新的執行緒C。

然後我再次pthread_join 執行緒A和B。 結果發現他們兩個之中一個會返回成功。

原因:

因為執行緒C的執行緒ID和執行緒A和B之中的一個相同。導致我對同一個執行緒pthread_join 兩次,分別pthread_join 了不同的執行緒。

措施:

在呼叫pthread_join 的時候進行判斷是否已經pthread_join 了,如果已經joni了,就不再join。如果這樣做則需要考慮多執行緒同時訪問。

man pthread_join :有如下提示

  After a successful call to pthread_join(), the caller is guaranteed that the target thread has terminated.
  Joining with a thread that has previously been joined results in undefined behavior.

  All of the threads in a process are peers: any thread can join with any other thread in the process.