#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 W(){
sem_wait(&sem);
}
void F(){
sem_post(&sem);
}
};
Semaphore mutex[N];
pthread_t thread[N];
pthread_mutex_t mutex1;
int id[N];
int add=0;
enum state {think,hungry,eat};
state pid_state[N];
void *check_state(int a){
int i =a;
if(pid_state[i]==hungry&&pid_state[LEFT]!=eat&&pid_state[RIGHT]!=eat){
pid_state[i]=eat;
mutex[i].F();
}
}
void *Do_take_fork(int param){
int i =param;
pthread_mutex_lock(&mutex1);
pid_state[i]=hungry;
check_state(i);
pt
哲学家就餐问题,linux下实现。
最新推荐文章于 2025-03-11 11:12:07 发布