某條河只有一座獨木橋(東西向),以便行人過河。現在河的兩邊都有人要過橋,按照下面規則過橋,為了保證過橋安全,請用p、v操作分別實現正確的管理。
規則:同一方向的可連續過橋,但可連續過橋人數最多為10人。
某方向有人過橋時另一方向的人要等待
我對這個題目的理解:乙個方向的人開始過橋時,橋上最多過10個,如果橋上的人滿了,那麼同方向的人再想要過橋就必須等待,直到這個方向的人全部過橋,對向的人才可以過橋。(下面**按此理解進行編碼)
第二種理解(有點矛盾):東西方向交替過橋,一次最多連續過十個。我就在想,假設東方向有25個人要過橋,而西方向10人過橋的條件下,當東方向已經過了10個人(剩餘15個),然後西方向10人過橋(剩餘0個),然後東方向再過去10個(剩餘5個),此時因為該西方向人過橋,但是西方向沒人,如果西方向沒人過橋,東方向必須要一直等嗎?很矛盾。所以我就按第一種理解去設計了。(如果按此理解需要加一點前提條件:假設兩邊的人無限多)
semaphore bridge =10;
//橋互斥訊號量
semaphore wait =1;
//等待互斥, 當對面方向有人過橋就等待
semaphore mutex1 =1;
//東方向互斥訊號量
semaphore mutex2 =1;
//西方向互斥訊號量
int count1 =0;
//東方向要過橋人數, 要過橋+1, 已經過橋-1
int count2 =0;
//西方向要過橋人數, 要過橋+1, 已經過橋-1
process_1
count1++;v
(mutex1);p
(bridge)
; 東方向人過橋();
v(bridge);p
(mutex1)
; count1--;if
(count1 ==0)
v(mutex1);}
process_2
count2++;v
(mutex2);p
(bridge)
; 西方向人過橋();
v(bridge);p
(mutex2)
; count2--;if
(count2 ==0)
v(mutex2)
;}
OS PV操作 3 銀行業務問題
某銀行有3個業務視窗,15個供等候辦理業務的顧客做的座椅。如果沒有顧客,銀行職員便在業務視窗中等待顧客 當顧客到達時,若沒有空椅子,顧客就離開 否則到取號機 僅有乙個取號機 然後坐在空椅子上等待叫號 銀行職員辦理完某個顧客的業務後,如果有等待的顧客,按叫號系統按鈕叫號 顧客辦完業務後將直接離開。請為...
作業系統 PV操作 獨木橋問題
改造題型 總結在作業系統中,使用pv操作實現程序的同步和互斥是程序管理的重要內容。pv操作不僅是本科學習階段的重難點,也是研究生入學考試的乙個重點考察知識。今天跟大家帶來乙個常見的pv操作題,題目描述如下 東西向汽車過獨木橋,為了保證安全,只要橋上無車,則允許一方的汽車過橋,待一方的車全部過完後,另...
周周過,週週結(4)
剛剛參加了普通話考試,三分鐘描述出現了好幾次停頓,其他的還可以,現在就等成績出來了。這周一直都在複習專業課的知識,主要複習了資料結構,前面幾章複習的還挺快的,到後面樹與二叉樹之後就很慢了,感覺有些知識點理解起來會有些吃力,得多花點時間理解。離散複習我是從最後一章開始的,因為前面其中考試的時候都有複習...