動機

兩條thread對兩個socket fd做讀寫(一讀一寫、一寫一讀),等另外一邊結束後 另一條thread沒辦法結束join

原因

另一條沒辦法結束的thread卡在write上

沒有任何報錯就是卡在write一直不跳出去 (感覺是kernel的錯,用一般原始的kernel就沒事)

明明fd都關了另一邊卻看不到,感覺遇到了可見性問題

根據查的資料,close沒有thread-safe

解法

用cond var,來通知main thread把另一條砍掉

坑: transfer of control bypasses initialization of

如果用cpp11的cond var,加上goto,就會有這個錯誤 用pthread的cond var就ok了

查看程式開的fd

cat /proc/<pid>

寫在後面

如果用message passing,而不是用2條thread去做會不會比較好 這樣thread就不用負擔管理fd的任務

Ref

close-thread-safe