推 flarehunter: wait會釋放lock 所以別人才能拿lock再notify 07/21 18:11
推 cutekid: 好奇原來的code在empty時,遇到兩個get一個put為什麼會壞 07/21 19:59
推 flarehunter: 因為他用if不是while 07/21 21:19
推 cutekid: 嗯,我用if的狀況去分析,還是看不出會出問題 07/22 08:54
→ cutekid: sean72大大,你有看出問題嗎 07/22 08:55
原來的code 只用了一個lock
https://paste.ubuntu.com/p/dkqbMs8NKS/
先來兩個get,兩個都會卡在 wait
put, 然後會notify其中一個get 然後進行
此get完畢之後,又送了 notify給另外一個正在wait的get
2nd get醒來之後,因為是if語句,所以沒有繼續檢查que empty
直接執行popleft 所以出錯
※ 編輯: sean72 (172.89.32.145), 07/22/2018 10:22:10
推 cutekid: 瞭解了,謝謝 s 大還有 f 大 07/22 10:44