執行緒協作
阿新 • • 發佈:2022-03-30
執行緒協作(生產消費者模式)
應用場景:生產者和消費者問題
- 假設倉庫中只能存放一件產品,生產者將生產出來的產品放入倉庫,消費者將倉庫中產品取走消費
- 如果倉庫中沒有產品,則生產者將產品放入倉庫,否則停止生產並等待,直到倉庫中的產品被消費者取走為止
- 如果倉庫中放有產品,則消費者可以將產品取走消費,否則停止消費並等待,直到倉庫中再次放入產品為止
分析
這是一個執行緒同步問題,生產者和消費者共享同一個資源,並且生產者和消費者之間相互依賴,互為條件
- 對於生產者,沒有生產產品之前,要通知消費者等待。而生產了產品之後,又需要馬上通知消費者消費
- 對於消費者,在消費之後,要通知生產者已經結束消費,需要生產新的產品以供消費
- 在生產者消費者問題中,僅有synchronized是不夠的
- synchronized可以阻止並非更新同一個共享資源實現了同步
- synchronized不能用來實現不同執行緒之間的訊息傳遞(通訊)
解決方式1
併發協作模型”生產者/消費者模式“--》管程法
- 生產者:負責生產資料的模組(可能是方法、物件、執行緒、程序)
- 消費者:負責處理資料的模組(可能是方法、物件、執行緒、程序)
- 緩衝區:消費者不能直接使用生產者的資料,他們之間有一個緩衝區 生產者將產好的資料放入緩衝區,消費者從緩衝區拿走資料
解決方式2
併發協作模型”生產者/消費者模式“--》訊號燈法