摘要:生產生成數據,通知消費者現在條數生產者判斷現在含有的數據大于不需要再生產消費者無法消費到數據,處于等待狀態消費數據
# -*- coding:utf-8 -*- """ Created by FizLin https://github.com/Fiz1994 """ # Consume one item # with cv: # while not an_item_is_available(): # cv.wait() # get_an_available_item() # # # Produce one item # with cv: # make_an_item_available() # cv.notify() from threading import Thread, Condition import time queue = [] MAX_NUM = 10 condition = Condition() def producer(): global queue while True: condition.acquire() if len(queue) <= 0: # 生產 queue.extend([i for i in range(10)]) print("生成數據,通知消費者 現在條數:", len(queue)) condition.notify() condition.wait() else: print("生產者判斷現在含有的數據: 大于0 不需要再生產", len(queue)) condition.notify() condition.release() time.sleep(1) def consumer(): global queue while True: condition.acquire() if len(queue) <= 0: print("消費者無法消費到數據,處于等待狀態") condition.wait() else: print("消費數據:", queue.pop(0)) time.sleep(1) condition.notify() condition.release() p = Thread(target=producer) c = Thread(target=consumer) p.start() c.start()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/40657.html
摘要:提供了多線程升級方案將同步替換成了顯示的操作。線程間通信接口可以替代傳統的線程間通信,用替換,用替換,用替換。商品執行上述代碼,觀察結果可以看到,多個線程同時生產消費,由于指定喚醒互異線程,因此并不會引起錯誤。 JDK 1.5提供了多線程升級方案將同步synchronized替換成了顯示的Lock操作??梢詫崿F喚醒、凍結指定的線程。 Lock接口Lock 實現提供了比使用 synchr...
摘要:最后一直調用函數判斷節點是否被轉移到隊列上,也就是中等待獲取鎖的隊列。這樣的話,函數中調用函數就會返回,導致函數進入最后一步重新獲取鎖的狀態。函數其實就做了一件事情,就是不斷嘗試調用函數,將隊首的一個節點轉移到隊列中,直到轉移成功。 ?我在前段時間寫了一篇關于AQS源碼解析的文章AbstractQueuedSynchronizer超詳細原理解析,在文章里邊我說JUC包中的大部分多線程相...
摘要:總結在一開是的例子中,假設有兩個線程,分別代表生產者和消費者線程,生產消費元素的隊列容量為。 什么是Condition Condition必須要和獨占鎖一起使用,獨占鎖代替了原來的synchronized,Condition代替了原來的Object中的監視器方法(wait, notify and notifyAll);一個Lock可以對應多個Condition,這樣線程之間可以按照條件...
摘要:總結在一開是的例子中,假設有兩個線程,分別代表生產者和消費者線程,生產消費元素的隊列容量為。 什么是Condition Condition必須要和獨占鎖一起使用,獨占鎖代替了原來的synchronized,Condition代替了原來的Object中的監視器方法(wait, notify and notifyAll);一個Lock可以對應多個Condition,這樣線程之間可以按照條件...
摘要:在上一篇文章從到實現自己的阻塞隊列上中,我們已經實現了一個可以使用的阻塞隊列版本。插入鎖隊列未滿的條件變量彈出鎖隊列非空的條件變量最后我們要對和方法中的調用做出一些調整。 在上一篇文章《從0到1實現自己的阻塞隊列(上)》中,我們已經實現了一個可以使用的阻塞隊列版本。在這篇文章中,我們可以繼續我們的冒險之旅,將我們的阻塞隊列提升到接近JDK版本的水平上。 更進一步優化效率 我們一直使用的...
閱讀 1007·2021-11-15 18:06
閱讀 2372·2021-10-08 10:04
閱讀 2658·2019-08-28 18:03
閱讀 906·2019-08-26 13:42
閱讀 1924·2019-08-26 11:31
閱讀 2433·2019-08-23 17:13
閱讀 934·2019-08-23 16:45
閱讀 2060·2019-08-23 14:11