作業系統2022-4-11(1)
阿新 • • 發佈:2022-04-11
第一題:
哲學家就餐問題:
1)按照教材中的解決方法描述,什麼情況下5個哲學家全部吃不上飯?
2)描述一種沒有人餓死(永遠拿不到筷子)演算法。雙號學生按奇數號偶數號哲學家分組策略)
(1)當哲學家飢餓時,總是先去拿他左邊的筷子。而當五個哲學家同時飢餓時,會同時拿他左邊的筷子,就會使五個訊號量,同時變成0,當他們再試圖拿右邊的筷子時,就會因為沒有筷子可以拿陷入無限的等待。5個哲學家全部都吃不上飯,全都餓死。
2)描述一種沒有人餓死(永遠拿不到筷子)演算法。雙號學生按奇數號偶數號哲學家分組策略)
semaphore chopstick[i]={1,1,1,1,1}//五雙筷子 do{ ifi%2==0//進行偶數哲學家程序 { wait(chopstick[(i+1)%5];//拿右筷子 wait(chopstick[i]);//拿左筷子 eat();//吃飯 signal(chopstick[(i+1)%5]); signal(chopstick[i]); think();//思考 }else{//奇數哲學家程序 wait(chopstick[i]);//拿左筷子 wait(chopstick[(i+1)%5];//拿右筷子 eat();//吃飯 signal(chopstick[i]); signal(chopstick[(i+1)%5]); think();//思考 } }while(true);