作業系統中關於生產者消費者問題

2021-07-23 16:38:24 字數 1102 閱讀 3223

m個消費者,r個消費者和n個緩衝器

分析:現在是m個生產者在生產了產品向緩衝器存放時,由於只有乙個指示位置的共享變數k,所以那些所有的生產者需要互斥訪問共享變數k,即同一時刻只能有乙個訪問,同理消費者共享了指示位置的t,所有消費者也要互斥訪問共享變數t,顯然生產者需要乙個乙個的去緩衝器中存放物品,而消費者需要乙個乙個的到緩衝器中存放物品,但現在有兩種解法的點在於:是可以生產者和消費者只能有乙個在緩衝器中,還是即使生產者在緩衝器中,消費者也可以進來取東西。

現在我們先來說第乙個程式(生產者和消費者同一時刻只能有乙個在緩衝器中)

首先我們還要以前講過的sp = n(用於計數可用資源數(空的緩衝器)),sc = 0(用於記錄滿的緩衝器)兩個訊號互斥量,還需要增加乙個互斥訊號量s = 1(用於生產者和消費者之間互斥訪問緩衝器)

[html]view plain

copy

int buffer[n],k= 

0,t= 

0;  

semaphore sp= n

,sc= 0

, s= 1

;  process produceri(void)  (i= 1

,2,3...m)  

;  p(sp);  

p(s);  

buffer[k] = product;  

k= (++k)%n;  

v(s);  

v(sc);  

}  }  

[html]view plain

copy

process consumerj(void)  (j= 

1,2,3....r)  

;  t

= (++t)%n;  

v(sp);  

v(s);  

;  }  

}  

(2)就是上面所說的在生產者在緩衝器裡面房放產品時,消費者也能進去取產品。

其實修改很簡單,上面程式不是設定乙個訊號量讓s = 1,不管是消費者還是生產者都只能乙個人訪問共享變數,現在只要在生產者裡面設立乙個互斥訪問量s1 = 1,然後在消費者裡面在設立乙個互斥訪問量s2 = 1,就行了。

作業系統,生產者 消費者問題詳解

生產者 消費者問題 分析問題,確定臨界區 設定互斥訊號量,初值為1 臨界區之前對訊號量執行p操作臨界區之後對訊號量執行v操作分析問題,找出 需要實現 一前一後 的同步關係 設定同步訊號量,初始值為0 在 前操作 之後執行v操作在 後操作 之前執行p操作分析問題,畫出前驅圖,把每一對前驅關係都看成乙個...

作業系統裡的生產者 消費者問題

前段時間網上有乙個人讓我幫他改個程式,作業系統裡面生產者與消費者的那個程式,寫的一片混亂,改了好長時間。很弱智。include include include include include using namespace std define buffer num 6 int product bu...

生產者和消費者問題c 作業系統)

生產者和消費者 include include include includeusing namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short ...