Linux下實現哲學家就餐問題

2021-06-26 06:19:20 字數 961 閱讀 7882

哲學家進餐問題是乙個多執行緒運用的經典例子,涉及到執行緒同步/互斥,臨界區訪問問題以及乙個避免死鎖的解決方法。

有五個哲學家繞著圓桌坐,每個哲學家面前有一盤面,兩人之間有一支筷子,這樣每個哲學家左右各有一支筷子。哲學家有2個狀態,思考或者拿起筷子吃飯。如果哲學家拿到乙隻筷子,不能吃飯,直到拿到2只才能吃飯,並且一次只能拿起身邊的一支筷子。一旦拿起便不會放下筷子直到把飯吃完,此時才把這雙筷子放回原處。如果,很不幸地,每個哲學家拿起他或她左邊的筷子,那麼就沒有人可以吃到飯了。這就會造成死鎖了。這是需要堅決杜絕的,正如作業系統的死鎖問題。

編號為i的哲學家就餐的演算法如下:   

while(true)else

吃飽後隨意的睡上一段時間

}

在linux下實現的具體**如下:

#include #include #include #include #include #define n 6

#define left i

#define right (i+1) % n

using namespace std;

class semaphore

void p()

void v()

};semaphore mutex[n];

pthread_t thread[n];

int id[n];

void* solve(void* param) else

sleep(1); //執行緒等待

} pthread_exit(null); //結束執行緒

}void thread_create() }}

void thread_wait()

}int main()

thread_create();

thread_wait();

return 0;

}

Linux環境下實現哲學家就餐問題

include include include include include include 筷子作為mutex pthread mutex t chopstick 6 定義以筷子為鎖的陣列 void eat think void arg inti for pthread mutex lock c...

哲學家就餐問題

本文是哲學家就餐問題在 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...