pthread_join 兩次同一個執行緒
阿新 • • 發佈:2019-02-16
現象:我先建立兩個執行緒 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.