dining-philosopher

    1熱度

    1回答

    我想用java信號量來解決哲學家用餐問題,但我被卡住了。最高ID的筷子應該可用,但它似乎總是被採取,我不知道爲什麼。誰能告訴我我犯了什麼錯誤? 叉類: class Fork { public static Semaphore fork = new Semaphore(1); public int id; Fork(int id) { this.id = id; } publ

    0熱度

    1回答

    當基於Silberschatz的解決方案爲餐飲哲學家問題實現監控時,似乎沒有線程交錯執行。我是否阻止了某些不合適的內容或者是否存在某些硬件問題?因爲現在所有的哲學家都只是按照正確的順序吃東西。 public class DiningPhilosophersMonitor { public static final int NB_OF_PHILOSOPHERS = 5; private en

    1熱度

    2回答

    我已經實現了資源層次結構解決方案到餐飲哲學家的問題。當我試圖比較兩個筷子的n值時,它們最終陷入僵局。但是,如果我使用它們的hashCode而不是n個值,它會順利運行。爲什麼這個區別?他們在一天結束時都不是數字嗎? import java.util.Random; class Chopstick { public final int n; public Chopstick(i

    0熱度

    3回答

    我想解決就餐哲學家問題。所以我幾乎做了整個代碼,但問題是我不能初始化監視器(我已經制作了僞代碼,我用C++重新編寫)如此真的我無法測試該程序。任何人都可以幫助我說明monitor/mutex_init的初始化有什麼問題嗎? 我得到錯誤第18行,它是這樣: 錯誤:爲不同類型的符號 其更改爲INT調用pthread_mutex_init(&顯示器,NULL)的「廉政調用pthread_mutex_in

    0熱度

    1回答

    我正在嘗試創建多個線程併爲餐飲哲學家的問題傳遞不同的值給每個線程。但我收到此錯誤: warning: cast to pointer from integer of different size 這裏是我的代碼: pthread_mutex_t mutex; pthread_cond_t cond_var; pthread_t philo[NUM]; int main(void) {

    -1熱度

    2回答

    我正在與5個哲學家和5個筷子的經典餐飲哲學家問題。我的作業是使用1個互斥體和5個條件。我得到它的工作,但我不知道爲什麼哲學家1從不吃,但4,3,0吃,2吃兩次。這裏是我的代碼(遺憾的長度): //To compile: gcc -pthread -o monitor monitor.c //To execute: ./monitor "an integer as the amount of fo

    -1熱度

    1回答

    這個僞代碼可以解決用餐哲學家最大平行度問題嗎?這裏mutex是一個二進制信號量,初始化爲1.叉假定從0到(N-1)編號。總共有N位哲學家編號從0到(N-1)。 void philosopher(int i) // ith philosopher { while (true) { think(); down(&mutex); // acquire l

    1熱度

    1回答

    我正在研究一個問題,我應該實現一個哲學家哲學範式的例子。 注意:是的,這是一個家庭作業,在任何人問之前。 雖然我不是要求解決方案。我很困惑,因爲我的老師在下面提供的這個Philosopher函數在理論上應該工作。 wait和signal是C語言中用於OS系統調用的函數。 我一直在使用包括他們: /* Wait and Signal */ #include <signal.h> #include

    1熱度

    1回答

    試圖通過創建一個門衛來解決哲學家的餐飲問題,只允許4位哲學家一次性用餐,計劃使用信號量但是關於它們的材料有限網絡,我不知道如何增加信號量的值,一旦它已被髮信號。 #define INITIAL_COUNT 1 #define MAX_COUNT 4 主() philo.doorSemaphore = CreateSemaphore( NULL, //default securit

    0熱度

    1回答

    我正在處理哲學家的餐飲算法。我需要生成5個哲學家,我已經這樣做了使用此代碼 main() -> philos1 = spawn (?MODULE, philosopher, []), philos2 = spawn (?MODULE, philosopher, []), philos3 = spawn (?MODULE, philosopher, []),