※ 引述《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