日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【操作系统】哲学家就餐问题

發布時間:2023/11/30 windows 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【操作系统】哲学家就餐问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題

有五個哲學家圍坐在一圓桌旁,桌中央有一盤通心粉,每人面前有一只空盤子,每兩人之間放一只筷子。每個哲學家的行為是思考,感到饑餓,然后吃通心粉。為了吃通心粉,每個哲學家必須拿到兩只筷子,并且每個人只能直接從自己的左邊或右邊去取筷子。
一個簡單的解法是,用一個信號量表示一支筷子,這五個信號量構成信號量數組,所有信號量初始值為1,第I個哲學家的活動課描述為:

semaphore chopstick[04] = {1,1,1,1,1}; Repeatthink;wait(chopstick[i]);wait(chopstick[(i+1) mod 5]);eat;signal(chopstick[i]);signal(chopstick[(i+1) mod 5]); until false;

若五位哲學家同時饑餓而各自拿起了左邊的筷子,這使五個信號量 chopstick 均為 0,當他們試圖去拿起右邊的筷子時,都將因無筷子而無限期地等待下去,即可能會引起死鎖。為防止死鎖發生,哲學家進餐問題的改進解法:
方法一:至多只允許四位哲學家同時去拿左筷子,最終能保證至少有一位哲學家能進餐,并在用完后釋放兩只筷子供他人使用。
方法二:僅當哲學家的左右手筷子都拿起時才允許進餐。
方法三:規定奇數號哲學家先拿左筷子再拿右筷子,而偶數號哲學家相反。
請用PV操作描述上述三種方法。

解決方法

方法一

至多只允許四位哲學家同時去拿左筷子,最終能保證至少有一位哲學家能進餐,并在用完后釋放兩只筷子供他人使用

int chopstick[5] = {1, 1, 1, 1, 1}; int man = 4; //最多4個人可以拿左筷子 Philosopher( int i ) { //第i個哲學家while( true ) {think();wait( man ); //拿左筷子的哲學家不超過4個wait( chopstick[i] );wait( chopstick[ (i+1)%5 ] );eat();signal( chopstick[i] );signal( chopstick[(i+1)%5] );signal( man );} }
方法二

僅當哲學家的左右手筷子都拿起時才允許進餐,否則將拿起的筷子放下

1)為便于理解(2),先使用AND型信號量int chopstick[5] = {1, 1, 1, 1, 1}; Philosopher( int i ) {while( true ) {think();Swait( chopstick[i], chopstick[(i+1)%5] );eat();Ssignal( chopstick[i], chopstick[(i+1)%5] );} }(2) 使用PV操作// 使用加鎖方式,將取左右筷子的過程綁定為原子操作 int chopstick[5] = {1, 1, 1, 1, 1}; int muitex = 1; Philosopher( int i ) {while( true ) {think();wait( mutex );wait( chopstick[i] );wait( chopstick[(i+1)%5] );signal( mutex );eat();signal( chopstick[i] );signal( chopstick[(i+1)%5] );} }
方法三

規定奇數號的哲學家先拿起他左邊的筷子,然后再去拿他右邊的筷子;而偶數號的哲學家則相反

int chopstick[5] = {1, 1, 1, 1, 1}; Philosopher( int i ) {while( true ) {think();if( i % 2 ) { //奇數號哲學家wait( chopstick[i] );wait( chopstick[(i+1)%5] );} else { //偶數號哲學家wait( chopstick[(i+1)%5] );wait( chopstick[i] );}eat();signal( chopstick[i] );signal( chopstick[(i+1)%5] );} }

總結

以上是生活随笔為你收集整理的【操作系统】哲学家就餐问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。