經典程序同步問題 哲學家進餐問題

2021-08-31 19:08:27 字數 687 閱讀 3116

五個哲學家公用一張圓桌, 分別坐在周圍的五張桌子上, 在圓桌上有五個碗和五隻筷子交叉排列, 它們的生活方式是交替的進行思考和進餐. 哲學家進行思考時不用筷子, 飢餓時取乙隻他兩邊的任意乙隻筷子(預設取左邊的筷子, 沒有時取右邊的, 都沒有時就取不了), 當他有兩隻筷子時就能進餐. 進餐後, 放下筷子繼續思考.若只有乙隻筷子, 不放棄該筷子並等待擁有另乙隻筷子時再進餐.

用乙個訊號量表示乙隻筷子, 共五個訊號量 semaphore chopsitck[5] = ; , 為 1 表示筷子未拿起, 為0表示筷子被拿起.那麼第i為科學家的進餐活動就可以描述為

法一:記錄型訊號量:

do  while (true);
假設五位哲學家都要拿筷子(都拿左手邊), 那麼將沒有人可以 用餐, 就會陷入死鎖狀態.則哲學家進餐的解決方法:

1.至多允許四位哲學家拿同一邊的筷子, 則可讓至少一位哲學家先用餐, 用餐完後釋放筷子進而讓其他哲學家有機會用餐.

2.五位哲學家先競爭奇數(偶數)好筷子, 在競爭偶數(奇數)號筷子, 總會有一位哲學家能進餐.

法二: and型訊號量

//and型訊號量

semaphore chopstick[5] = ;

do while (true);

經典程序同步問題 哲學家進餐

問題描述 一張圓桌上坐著5名哲學家,每兩名哲學家之間的桌上擺著一根筷子,兩根筷子中間是一碗公尺飯,如圖所示 圖來自於王道作業系統課本 哲學家只會思考和進餐,哲學家在思考時,並不影響其他人。只有當哲學家飢餓時,才試圖拿起左 右兩根筷子 一根一根拿起 若筷子在其他人手上,則需等待。飢餓的哲學家只有同時拿...

程序同步 互斥 哲學家進餐問題

1 問題描述 一張圓桌上有5名哲學家,沒兩個哲學家之間有一根筷子,桌子中間由一碗公尺飯。當哲學家飢餓時會試圖分別拿起左右兩根筷子,如果筷子已在他人手上則需等待。飢餓的哲學家只有拿起兩根筷子才能進餐,吃完後才能放下筷子。2 問題分析 對哲學家分別編號0,1,2,3,4,對筷子編號0,1,2,3,4。i...

經典程序的同步問題之 哲學家進餐

哲學家進餐問題描述 由dijkstra提出並解決哲學家進餐問題 the dinning philosophers problem 是經典的同步問題。該問題是描述有五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五個碗和五隻筷子,他們的生活方式是交替的進行思考和進餐。平時,乙個哲學家進行思...