基礎篇 內建鎖實現生產者和消費者模型

2021-10-01 14:41:44 字數 409 閱讀 3190

啟示錄

「生產者和消費者模型」 是多執行緒通訊的典型案例,本章節將利用前一節的鎖和條件佇列的知識,來實現乙個完整的有界緩衝區,並建立多個執行緒訪問該有界緩衝區,模擬生產者提供資料、消費者處理資料的過程,正文如下。

生產者和消費者模型中,因為多個執行緒共享同乙個緩衝區,所以就涉及到兩個重要的通訊約束:

緩衝區滿的時候,生產者不能再新增資料,應該阻塞等待,直到緩衝區有空位;

緩衝區空的時候,消費者不能再獲取資料,應該阻塞等待,直到有新的資料加入緩衝區。

要保證上述約束條件,可以用sleep空迴圈,也可以使用鎖和條件佇列。利用鎖和條件佇列實現的思路是,生產者和消費者有各自要等待的條件,一旦條件不滿足,就阻塞在該條件佇列上,直到另乙個執行緒喚醒自己。

緩衝區的 「滿」 和 「空」 是兩個條件&#x

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者和消費者

package demo.one public class producerconsumerdemo 資源 class resource catch interruptedexception e this.name name count system.out.println thread.curre...

生產者和消費者

package com.yuxinyicheng.test2 生產者和消費者的問題 生產者將產品交給店員,而消費者從店員處取走產品,店員一次只能有固定數量的產品 比如 20個 如果生產者試圖生產更多的產品,店員會叫生產者停一下,如果店員中有空位放產品,再通知生產者繼續生產 如果店中沒有產品,店員會告...