用c++設計哲學家進餐問題的求解
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<iostream>
#include<unistd.h>
#include<semaphore.h>
#define N 5
#define LEFT i
#define RIGHT (i+1)%N
using namespace std;
class Semaphore{
private:
sem_t sem;
public:
Semaphore(int value=1){
sem_init(&sem,0,value);
}
void P(){
sem_wait(&sem);
}
void V(){
sem_post(&sem);
}
};
Semaphore mutex[N];
pthread_t thread[N];
int id[N];
int add=0;
void* solve(void*param){
int i =*((int*)param);
while(true){
if(add>=30){
cout<<"noodles is over"<<endl;
break;
}
cout<<"philo"<<i<<" thinking"<<endl;
if(i%2==0){
mutex[LEFT].P();
mutex[RIGHT].P();
cout<<"philo"<<i<<" eatting"<<endl;
add++;
cout<<add<<endl;
mutex[RIGHT].V();
mutex[LEFT].V();
}else{
mutex[RIGHT].P();
mutex[LEFT].P();
cout<<"philo"<<i<<" eatting"<<endl;
add++;
cout<<add<<endl;
mutex[LEFT].V();
mutex[RIGHT].V();
}
sleep(1);
}
}
void thread_create(){
int tmp;
for(int i=0; i<N; i++){
tmp=pthread_create(&thread[i],NULL,solve,&id[i]);
if(tmp!=0){
cout<<"thread"<<i<<"error"<<endl;
}
}
}
void thread_wait(){
for(int i=0; i<N; i++){
pthread_join(thread[i],NULL);
}
}
int main(){
for(int i=0; i<N; i++){
id[i]=i;
}
thread_create();
thread_wait();
return 0;
}
相關文章
- 哲學家就餐問題詳解
- java實現pv操作 -------哲學家問題Java
- c++求解李白喝酒問題C++
- 程式設計題求解程式設計
- 程式設計師的哲學程式設計師
- 「 思考 」 React Hooks 的設計哲學ReactHook
- KDE設區--C++的二進位制相容問題C++
- c++求解獎券題目C++
- 程式語言設計,程式設計哲學程式設計
- 湖南大學人工智慧實驗二:Prolog程式設計求解圖搜尋問題人工智慧程式設計
- 樹遞迴問題的求解遞迴
- 分治法求解問題
- 深度學習求解「三體」問題,計算速度提高一億倍深度學習
- Kotlin語言中的泛型設計哲學Kotlin泛型
- 書評:軟體設計哲學
- 漫談哲學與程式設計程式設計
- 程式導向程式設計哲學程式設計
- 求解c++C++
- 從零開始理解 Laravel 的設計哲學Laravel
- Unix哲學(Unix程式設計藝術)程式設計
- AI助攻「菜鳥數學家」解決忙碌海狸問題,陶哲軒轉發分享AI
- [提問交流]OneThink學習日記(更有很多問題求解答!)
- 用蠻力法(窮舉法)求解冪集問題
- DPLL 演算法(求解k-SAT問題)詳解(C++實現)演算法C++
- React 進階設計與控制權問題React
- 利用遺傳學演算法求解工作分配問題演算法
- 走近宮本茂:遊戲之神的設計哲學遊戲
- Go 設計哲學:少即是多,哪裡來的?Go
- python+gurobi求解排班問題Python
- NP難問題求解綜述
- 用 Httprunner3 做介面測試遇到了問題,求解~HTTP
- LeetCode刷題:設計問題篇(C++實現,持續更新中...)LeetCodeC++
- 有關介面測試的用例設計問題
- 一個“一筆畫”問題的求解器
- JAVA程式設計題-用java解決兔子問題Java程式設計
- 萬智牌設計中的數學問題(上)
- 【組合數學】遞推方程 ( 有重根遞推方程求解問題 | 問題提出 )
- 從一個問題中瞭解數學在程式設計中的應用程式設計