Python 板


LINE

https://paste.ubuntu.com/p/cWsFNYcGpQ/ 先寫了MyQueue1 用一個condition consumer thread透過condition判斷que empty ,就wait, release lock producer thread透過同一個condition 取得lock, 放東西到que, and notify consumer 但是看了python and java source code 都是用兩個condition (not_empty / not_full) 為什麼要這麼做呢?我的作法應該也行得通,難道是效率問題? 看不透,請大家解疑,感謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 76.169.162.97
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1556222522.A.941.html
1F:推 benchen0812: 我不確定 但我覺得應該是你這樣每次wake get() put() 04/26 06:22
2F:→ benchen0812: 同時被wake一次? 然後如果 2 condition get()-> 04/26 06:23
3F:→ benchen0812: 阿說錯 put()只需要notify get() 因為你在 len(que) 04/26 06:27
4F:→ benchen0812: >= cap: wait 的時候 只有當len(que)< cap 才會放出 04/26 06:28
5F:→ benchen0812: LOCK, 這時候你的len(que) = cap - 1. 然後你在que. 04/26 06:29
6F:→ benchen0812: append 這時len(que) = cap, 你只需要叫get(), 因為 04/26 06:30
7F:→ benchen0812: 你叫put他只會繼續入睡(len(put) = cap) 04/26 06:31
8F:→ benchen0812: 如果有錯請指正XD 04/26 06:31
很抱歉 沒能很清楚的了解你的意思 如果我只有一個condition variable Producer (P1) 先透過with self.condition 取得self.lock 剛進入while檢查是否有空間。 若此時Consumer(C1) 要讀取,透過self.condition想取得lock, 發現無法進入,因為self.lock被P1使用中,因此等在那兒 當P1檢查空間,發現滿了,無法放入新的item, 於是wait()也release lock 這時候等在那邊的C1 取得lock,開始做while 判斷是否有東西可以取得 我想,只有單一condition的情況,我的程式應該沒問題 但是如果有兩個condition, not_empty & not_full 按照Python Queue source code的註解 https://paste.ubuntu.com/p/5P3dZ35yt4/ 這兩個condition共同使用同一個lock 按照註解的寫法,我感覺是能夠同時達到一邊讀一邊寫, 但若是空了則C1 block等待,或者滿了則P1 block等待 或者,這是讓多個C1 C2 C3 / P1 P2 P3更有效率? 我不是很懂怎麼運作的 我也不知道我的理解對了幾成 現在正瘋狂搜索mutex / lock / signal 之類的文章找答案中... 有大神能解惑嗎? ※ 編輯: suhang (76.169.162.97), 04/26/2019 07:52:06
9F:推 Yshuan: size=1的時候, 2個thread去get, 一個卡wait, 一個過了 04/26 08:30
10F:→ Yshuan: condition相同, 過了的那個 nottify到 wait的那個, 然後? 04/26 08:31
que size = 1 if only has one self.condition c1 consuming, c2 blocked and waiting c1 notify and release lock c2 get lock and check while loop que size = 0, c2 wait() 如果只有單一condition, 不會有bug吧? ps 如果不是用while loop 而是用 if 檢查 que size, 就會出問題了 ※ 編輯: suhang (76.169.162.97), 04/26/2019 08:59:24
11F:推 Yshuan: size=Full. Ta, Tb: put and wait. T1: get and sig(Ta). 04/26 11:30
12F:→ Yshuan: T2: put and acquire first then Ta, Tb, finally sig(Tb) 04/26 11:30
13F:→ Yshuan: Ta, Tb wait and put, size overflow. 04/26 11:30
14F:推 Yshuan: 更正, 不需要T2. Ta wake and sig(Tb). 就炸了 04/26 11:37
抱歉,我看得更糊塗了 現在只有一個condition, que full Ta, Tb: put and wait. Ta Tb 是producer嗎? Ta Tb兩個producer都在等待中 T1: get and sig(Ta). T1領了一個item, 然後Ta正好搶到了lock T2: put and acquire first then Ta, Tb, finally sig(Tb) 這邊 T2是producer ? Yshuan 能麻煩你回一篇嗎? ps 我還是沒搞懂為什麼要用兩個condition ps ps 如果只有一個condition que full producer 1(p1) , producer 2(p2) 同時想要put p1 acquire lock, while loop: que full, p1 wait and release lock p2 acquire lock while loop: que full, p2 wait and release lock 大家都等在那邊,不是嗎? ※ 編輯: suhang (76.169.162.97), 04/26/2019 12:09:33







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP