動機
兩條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的任務