題目彙總
步驟:(前V後P)
1:明確題目中都有哪些進程,以及要做什麼事情
2:找出其中的互斥關係,設置互斥信號量mutex(初值爲1)
3:找出其中的同步關係,畫出同步圖,設置同步信號量並設初值
4:根據同步信號量寫pv操作(別忘了設初值)
生產者消費者
一個生產者一個消費者,多個緩衝區
進程:生產者 消費者
互斥信號量:mutex(緩衝區)
同步信號量:full,empty,
生產者 消費者
生產一個產品 P(full)
P(empty) P(mutex)
P(mutex) 從緩衝區中取
放入緩衝區 V(mutex)
V(mutex) V(empty)
V(full) 消費
多生產者多消費者
蘋果橘子問題
實現“桌子上有一隻盤子,最多可容納兩個水果,每次只能放入或取出一個水果。爸爸專向盤子中放蘋果(apple),媽媽專向盤子中N放橘子(orange),兩個兒子專等喫盤子中的橘子,兩個女兒專等喫盤子中的蘋果。請用PV操作來實現爸爸、媽媽、兒子、女兒之間的同步與互斥關係。”
進程:爸爸、媽媽、兒子、女兒
互斥:盤子
父親
吸菸者
假設一個系統有三個抽菸者進程和一個供應者進程。每個抽菸者不停地捲菸並抽掉它,但是要捲起並抽掉一支菸,抽菸者需要有三種材料:菸草、紙和膠水。三個抽菸者中,第一個擁有菸草、 第二個擁有紙、第三個擁有膠水。供應者進程無限地ᨀ供三種材料,供應者每次將兩種材料放桌子上,擁有剩下那種材料的抽菸者卷一根菸並抽掉它,並給供應者進程一個信號告訴完成了,供應者就會放另外兩種材料再桌上,這個過程一直重複(讓三個抽菸者輪流地抽菸)
哲學家進餐
讀者寫者問題
允許多個讀者可以同時對文件執行讀操作
寫文件時不能有其他讀者讀,也不能有其他寫者寫
從緩衝區取奇偶數
倉庫中產品的存取存在限制
mutex:每次只能放一個
只有B-A<N 才能繼續向裏邊放A (sb初值設爲N-1)
只有A-B<M才能繼續向裏邊放B(B要少一點)(sa初值設爲M-1)
麪包師和推銷人員
參觀博物館
工廠生產零件裝配產品
對於裝配車間剛開始有一個疑惑,爲什麼不是把full1 full2在前邊直接減一,這樣難道不會取完一個另一個沒有了,這樣阻塞問題怎麼辦呢?
回答:
如果全部在前邊減一了,那麼若F1爲空,即使此時F2上有貨物,但由於阻塞到F1 那裏了,那麼F2也沒辦法取
而如果分開減的話,若F1順利取走,F2此時阻塞,那麼進程F3就會阻塞,直到F2貨架上有產品之後,F3順利執行
老和尚和小和尚
三個進程同步的PV操作
銀行顧客和營業員的PV操作
NS汽車橋上通行問題(相當於兩個讀者)
自行車生產線加工自行車(生產消費+死鎖;)
一個既是生產者也是消費者
這個問題對於既是消費者又是生產者的那個進程,不用考慮的太複雜,其實就是根據當前緩衝區的情況來決定到底是生產者還是消費者,加一個if語句就可以了
理髮師和顧客問題
播放影片的PV操作
s是電影院變量,count分別讀者共享
安全島通行問題
公交車售票問題
注意s1,s2 不能都是1,如果都爲1,兩個p操作就都能進行了,失去同步關係,可以假定在開車狀態,一個設1一個設0
也可以向答案中的那樣,利用先v後p
信箱中取信問題