一、問題描述

上一個例子中的生產者只生產一種產品,消費者也只消費一種產品,而這里生產者和消費者生產和消費的產品類型是不同的,這里“多生產者和多消費者”的“多”不是多個,而是多類,多類生產者和多類消費者!
二、問題分析

三、如何實現

考慮一個問題,可不可以不要這個互斥信號量mutex?

原因在於:本題中的緩沖區大小為1,在任何時刻,apple、orange、plate三個同步信號量中最多只有一個是1,而這幾個進程一開始都要對這三個信號量進行P操作,因此在任何時刻只有一個進程的P操作不會被阻塞,並順利地進入臨界區!
但如果盤子的容量是2,也就是緩沖區的容量是2的話......
如果設置 plate = 2
semaphore plate = 2;

若改一下規則,爸爸可向盤中放蘋果或桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果,則代碼描述如下:
semaphore empty=1; semaphore orange=0; semaphore apple=0; dad() { P(empty); 將水果放入盤中; 若放入的是桔子, 則V(orange); 否則V(apple); } son() { P(orange); 從盤中取出桔子; V(empty); 吃桔子; } doughter() { P(apple); 從盤中取出蘋果; V(empty); 吃蘋果; }
四、總結


要從“事件”的角度來考慮,要把“進程行為的前后關系”抽象為一對“事件的前后關系”!
