OS PV操作 4 過獨木橋問題

2021-10-24 20:13:45 字數 1177 閱讀 2288

某條河只有一座獨木橋(東西向),以便行人過河。現在河的兩邊都有人要過橋,按照下面規則過橋,為了保證過橋安全,請用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)

剛剛參加了普通話考試,三分鐘描述出現了好幾次停頓,其他的還可以,現在就等成績出來了。這周一直都在複習專業課的知識,主要複習了資料結構,前面幾章複習的還挺快的,到後面樹與二叉樹之後就很慢了,感覺有些知識點理解起來會有些吃力,得多花點時間理解。離散複習我是從最後一章開始的,因為前面其中考試的時候都有複習...