Re: [問題] thread-safe queue

看板Python作者 (suhang)時間6年前 (2019/04/26 12:40), 6年前編輯推噓0(004)
留言4則, 1人參與, 6年前最新討論串3/3 (看更多)
※ 引述《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

04/26 15:33, 6年前 , 1F
這樣的話不會 overflow 可是會卡死,因為 Ta 的 notify
04/26 15:33, 1F

04/26 15:33, 6年前 , 2F
已經被 Tb 吃掉了,但 Tb 什麼都沒做又繼續回去等待,且
04/26 15:33, 2F

04/26 15:34, 6年前 , 3F
T1 也還在等 notify 來喚醒他。造成佇列中還有東西,可是
04/26 15:34, 3F

04/26 15:34, 6年前 , 4F
所有 threads 都在睡的局面。
04/26 15:34, 4F
文章代碼(AID): #1Smekeao (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
文章代碼(AID): #1Smekeao (Python)