通訊機制解決生產者消費者問題
阿新 • • 發佈:2018-11-07
通訊機制解決生產者消費者問題實現高併發
生產者與消費者這類經典的同步問題可以有很多方式解決。
利用訊號量機制,利用管程機制解決問題。
今天來介紹一種新的解決生產者與消費者問題的方式--間接通訊機制。
先來看下程式碼實現。
package MM; public class receive { producer(){ message pmsg; //生產者產生的產品。 while(1) { receive(token,pmsg); //token是生產者的緩衝區。接收是否緩衝區內有空間 pmsg=produce(); send(buffer,msg); //buffer是消費者的緩衝區。 } } consumer(){ message cmsg; //消費者消費的產品。 while(1) { receive(buffer,cmsg); //buffer是消費者的緩衝區。接收是否緩衝區內有產品。 cmsg=consume(); send(token,null); //token是消費者的緩衝區。 } } const int capacity=n; //兩個緩衝區公共長度。 main(){ create mailbox(token); create mailbox(buffer); for(int i=0;i<capacity;i++) { send(token,null); //消費完緩衝區的產品 } cobegin(proocucer,consumer); } }
相對於其他兩種方式的特點:
1同步和通訊同時實現
2多個產生者和消費者可以同時訪問臨界資源(郵箱)。從而實現高併發。
3因為具有兩個緩衝區來實現同步,所以可以應用於分散式環境(生產者和token放在一個站點下,消費者和buffer放在一個站點下。)