#include <QCoreApplication>
/*------------哲学家进餐问题--------*/
#include<pthread.h>
#include<semaphore.h>
#include<unistd.h> //用于sleep()
/*
* 定义变量及含义如下
*/
#define N 5 //定义哲学家线程数
#define THINKING 0 //思考
#define HUNGRY 1 // 饥饿
#define EATING 2 // 吃饭
#define LEFT (ph_num+4)%N //表示当前哲学家左
#define RIGHT (ph_num+1)%N //表示当前哲学家右
//定义互斥锁(用于防止死锁) ,定义数组S[N]表示第i个哲学家占用资源信号及状态,
sem_t mutex;
sem_t S[N];
//定义操作函数,取筷子函数,放筷子函数,测试函数(函数名称及操作意义顺序依次)
void *philospher(void *num);
void takechopsticks(int);
void putchopsticks(int);
void test(int);
int state[N];//定义数组(哲学家状态)
int phil_num[N]={0,1,2,3,4};//初始化数组(哲学家编号下标)
using namespace std;
int main()
{
int i;
pthread_t thread_id[N];//声明线程ID数组
sem_init(&mutex,0,1);//初使化信号量的状态为1,并
哲学家进餐问题C语言实现--Ubuntu下Qt实现
最新推荐文章于 2020-11-13 18:16:03 发布