有五個哲學家,他們的生活方式是交替的進行思考和進餐。哲學家們公用一張圓桌,分別坐在周圍的五張椅子上。在圓桌上有5個碗和5支筷子。平時一個哲學家進行思考,飢餓時便試圖取用其左、右最靠近他的筷子,只有在他拿到兩支筷子時才能進餐。進餐畢,放下筷子又繼續思考。code
var chopstick:array[0……4] of semaphor資源
第i個哲學家的活動可買描述爲it
repeat wait(chopstick[i]); //拿起左邊筷子 wait(chopstick[(i+1) mod 5]); //拿起右邊筷子 ...eat... singal(chopctick[i]); //釋放左邊筷子 singal(chopstick[(i+1) mod 5]); //釋放右邊筷子 ... think; until false;
假如5個哲學家同時飢餓而各自拿起左邊的筷子,會使5個信號量均爲0;當他們再試圖拿起右邊筷子時,都將無限期的等待。map
var chopstick: array[0...4] of semaphore := (1,1,1,1,1)
具體過程:方法
repeat think; Swait(chopstick[(i+1) mod 5],chopstick[i]); eat SSingal(chopstick[(i+1) mod 5],chopctick[i]); think; until false;