Java 哲學家就餐問題

2021-07-04 19:52:13 字數 797 閱讀 6292

問題描述:

一群哲學家聚在一起就餐,每兩個哲學家之間有一根筷子。每個哲學家需要兩根筷子才能用餐,並且一定是先拿起左手邊的筷子,然後再拿右手邊的筷子。如果所有哲學家在同一時間拿起左手邊的筷子,就有可能造成死鎖。請使用執行緒和鎖,編寫模擬哲學家就餐問題。避免出現死鎖。

解法:首先,先不管死鎖,實現哲學家就餐問題。有兩個實體,筷子和哲學家。筷子被拿起和被放下與哲學家拿起筷子和放下筷子相對應。我們分別將它們封裝成物件。

public class chopstick

public void pickup()

public void pickdown()

}public class philosopher extends thread

public void eat()

public void pickup()

public void chew(){}

public void putdown()

public void run()

public boolean pickup()

public void pickdown()

}public class philosopher extends thread

public void eat()

} public boolean pickup()

return true;

} public void chew(){}

public void putdown()

public void run()

{ for(int i=0;i

哲學家就餐問題

本文是哲學家就餐問題在 linux 上的程式實現,與windows 平台的實現類似,程式上稍有不同。philosopherdining.cpp include include include include include include rasutil.h using namespace std ...

哲學家就餐問題

pragma once include include include include include include include include include include include include include stdafx.h handle chopstick 5 room l...

哲學家就餐問題

假設有五位哲學家圍坐在一張圓形餐桌旁,做以下兩件事情之一 吃飯,或者思考。吃東西的時候,他們就停止思考,思考的時候也停止吃東西。餐桌中間有一大碗義大利面,每兩個哲學家之間有乙隻餐叉。因為用乙隻餐叉很難吃到義大利面,所以假設哲學家必須用兩隻餐叉吃東西。他們只能使用自己左右手邊的那兩隻餐叉。哲學家就餐問...