看板 Python 關於我們 聯絡資訊
※ 引述《Yshuan (倚絃)》之銘言: : que size已滿. 三個Thread. : producer: Ta, Tb. : consumer: T1. : 0. producer都先啟動. 並且停在wait() : 1. T1執行, 執行完後notify Ta. : 2. Ta結束wait, 執行完後notify Tb : 因為你的condition只有一個, 因此造成producer notify producer. : 3. Tb結束wait. 執行並que overflow. Tb結束wait之後,應該是執行 第二行的while loop檢查 檢查發現que full, 就接著執行第三行的wait(),繼續回去等待 你說的情況應該是第二行寫成if的情況才會發生吧? 1. with self.condition: 2. while len(self.que) == self.cap: 3. self.condition.wait() thanks for helping me -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 76.169.162.97 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1556253608.A.932.html ※ 編輯: suhang (76.169.162.97), 04/26/2019 12:41:14
stucode: 這樣的話不會 overflow 可是會卡死,因為 Ta 的 notify 04/26 15:33
stucode: 已經被 Tb 吃掉了,但 Tb 什麼都沒做又繼續回去等待,且 04/26 15:33
stucode: T1 也還在等 notify 來喚醒他。造成佇列中還有東西,可是 04/26 15:34
stucode: 所有 threads 都在睡的局面。 04/26 15:34