‘生產者-消費者’模型與‘讀-寫者’模型

★生產者-消費者模型

      首先,我們先分析一下生產者與消費者模型:生產者與消費者是模型中不可缺少的2種角色,當然模型中肯定需要一個保存數據的場所,能夠將生產者生產的數據進行存儲。同時,模型必須要滿足生產者產生出數據後,消費者才能夠進行使用,即就是消費者必須位於生產者之後,當然生產者生產的數據最多將場所放置滿就不能繼續生產,下面有簡單的圖示:


wKiom1ecXAOQ36APAAAYVAe60OU407.png

     當然,如果有多個消費者和多個生產者,生產者與消費者之間的關係是同步的,生產者與生產者之間是互斥的,因爲一塊空間不能讓多個生產者同時進行生產。消費者和消費者之間也是互斥的,也就保證了不能同時進行一塊空間中數據的消費。


    生產者是否能夠生產取決於還有多少空間,而消費者是否能夠消費取決於有多少個數據,生產者開始時有空間,而沒有產生數據,所以生產者肯定居於消費者之前。


      例:下面是具體的實現生產者-消費者模型,其中使用鏈表來存儲生產的數據,生產的數據頭插入鏈表,消費者的消費數據進行頭刪。

wKiom1eca8nRMUAWAACzaVHGuEE503.png

wKioL1ecbMLSw86uAACy-NX6-qg019.png

wKiom1ecbRDDJQDZAAA3dcWYak8603.png

運行結果:

wKiom1ecbZbh08biAABGkmdCZQ8584.png


★讀、寫者模型

      讀、寫者模型與生產者消費者模型類似,但是也要不同的地方,多個讀者可以共享一塊空間中的數據,寫者之間是相互斥的,讀者和寫者之間是互斥的。

      讀寫鎖:也稱自旋鎖,一個讀寫鎖允許有多個讀者進行資源的讀取,但是隻能夠允許一個寫者對數據進行操作。


例:

wKioL1ech-CAZrJfAACs_87paq8872.png

wKioL1eciCWQP___AACjw7pj0Ww209.png

wKiom1eciHXjq8GyAAAextwHW3Q444.png

運行結果:

wKiom1eciXKyYVj5AABJi5ZQoPU896.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章