1. 程式人生 > 其它 >執行緒協作

執行緒協作

執行緒協作(生產消費者模式)

應用場景:生產者和消費者問題

  • 假設倉庫中只能存放一件產品,生產者將生產出來的產品放入倉庫,消費者將倉庫中產品取走消費
  • 如果倉庫中沒有產品,則生產者將產品放入倉庫,否則停止生產並等待,直到倉庫中的產品被消費者取走為止
  • 如果倉庫中放有產品,則消費者可以將產品取走消費,否則停止消費並等待,直到倉庫中再次放入產品為止

分析

這是一個執行緒同步問題,生產者和消費者共享同一個資源,並且生產者和消費者之間相互依賴,互為條件

  • 對於生產者,沒有生產產品之前,要通知消費者等待。而生產了產品之後,又需要馬上通知消費者消費
  • 對於消費者,在消費之後,要通知生產者已經結束消費,需要生產新的產品以供消費
  • 在生產者消費者問題中,僅有synchronized是不夠的
    • synchronized可以阻止並非更新同一個共享資源實現了同步
    • synchronized不能用來實現不同執行緒之間的訊息傳遞(通訊)

解決方式1

併發協作模型”生產者/消費者模式“--》管程法

  • 生產者:負責生產資料的模組(可能是方法、物件、執行緒、程序)
  • 消費者:負責處理資料的模組(可能是方法、物件、執行緒、程序)
  • 緩衝區:消費者不能直接使用生產者的資料,他們之間有一個緩衝區 生產者將產好的資料放入緩衝區,消費者從緩衝區拿走資料

解決方式2

併發協作模型”生產者/消費者模式“--》訊號燈法