推 Raymond0710: 用lock 看誰先acquire呢05/08 01:21
→ ymps3502: 我是把acquire放在迴圈裡,所以當Lock的時候,其他threa05/08 02:58
→ ymps3502: d會在迴圈空轉直到有thread release,可是當A thread re05/08 03:00
→ ymps3502: lease 時有非常高的機會再度搶到lock05/08 03:00
→ Leon: Use priority05/08 04:59
推 adgjl5645: 你有考慮到 Python 的 GIL 嗎?這種情況下應該做不出你05/08 05:21
爬了一下GIL的問題,所以只能自己設定每個thread的priority來解決囉?
→ adgjl5645: 想像中的 multithread 的情況喔05/08 05:21
推 mars90226: 乾脆你自己隨機分配現在該執行的是哪個thread05/08 09:54
是有想過如果同個玩家連續搶到三次就不讓他搶下一次啦…
→ zerof: code?05/08 10:30
這是run裡面的
while len(self.cards) != 0 and not GAMEOVER:
threadLock.acquire()
if match_card(self.cards):
# 強牌
elif STEAL:
# 偷牌
print_all_players_card() # 會更新下一張牌,並確認是否可以STEAL
threadLock.release()
※ 編輯: ymps3502 (111.80.114.99), 05/08/2017 10:59:40
※ 編輯: ymps3502 (223.143.103.77), 05/08/2017 11:21:21
→ zerof: ...Lock 要共用才是對的 05/08 12:31
阿,不好意思,我想說為了閱讀方便所以寫成threading.Lock(),實際上有在外面宣告threadLock = threading.Lock(),上面的code我修正過了
※ 編輯: ymps3502 (140.120.15.137), 05/08/2017 13:52:50
→ zerof: ....所以是每個 threading 各跑一個 while without IO? 05/08 14:06
是的
→ blc: random延遲? 05/08 15:24
※ 編輯: ymps3502 (140.120.15.137), 05/08/2017 15:42:46
→ zerof: 那沒用, lock 前 print(end="") or sleep(random()/1000)之 05/08 15:46
→ zerof: 類的吧, 後者會比較明顯一點 05/08 15:46
感謝各位,使用random有明顯改善了!
※ 編輯: ymps3502 (140.120.15.137), 05/08/2017 15:54:33