python 哲學家進餐問題

2021-10-05 21:18:10 字數 950 閱讀 4818

import threading

class diningphilosophers:

def __init__(self):

self.cv = threading.condition(

)# 字典物件,表示每個哲學家0,1,2,3,4的狀態,false表示未吃飯

self.d =

for i in range(5):

self.d[i]

= false

# actions表示多函式指標

def wantstoeat(self, philosopher: int, *actions) -> none:、

# 獲取鄰居的下標0,1,2,3,4

neighbors =

[philosopher - 1, philosopher + 1]

if neighbors[0]

< 0: neighbors[0]

= 4 if neighbors[1]

> 4: neighbors[1]

= 0

with self.cv:

# 判斷鄰居是否都是未吃飯

self.cv.wait_for(lambda: not self.d[neighbors[0]

] and not self.d[neighbors[1]])

# true表示正在吃飯

self.d[philosopher]

= true

# 將多函式指標通過map函式對映成可執行的函式,即指標---》指標()

# 因為map函式返回的是map物件,所以這裡進行強制資料型別轉換,來使actions正常執行

list(map(lambda x: x(

), actions))

self.d[philosopher]

= false

哲學家進餐問題

哲學家進餐問題 一 問題 5個哲學家圍坐在乙個圓桌上,每兩個哲學家之間都有乙隻筷子,哲學家平時進行思考,只有當他們飢餓時,才拿起筷子吃飯。規定每個哲學家只能先取其左邊筷子,然後取其右邊筷子,然後才可以吃飯。二 分析 每乙隻筷子都是乙個臨界資源,設定5個互斥訊號量。semaphore stcik 5 ...

哲學家進餐問題

一張圓桌上坐著5名哲學家,每兩個哲學家之間的桌上擺一根筷子,桌子的中間是一碗公尺飯,如圖所示。哲學家們傾注畢生精力用於思考和進餐,哲學家在思考時,並不影響他人。只有當哲學家飢餓的時候,才試圖拿起左 右兩根筷子 一根一根地拿起 如果筷子已在他人手上,則需等待。飢餓的哲學家只有同時拿到了兩根筷子才可以開...

哲學家進餐問題

哲學家進餐問題 五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考 分析 放在桌子上的筷子是臨界資源,在一段時間內...