哲学家进餐问题C语言实现--Ubuntu下Qt实现

这是一个用C语言在Ubuntu环境下使用Qt实现的哲学家进餐问题的程序。通过互斥锁和信号量解决并发中的死锁问题,模拟哲学家的思考、饥饿和吃饭状态,并在满足条件时进行资源分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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,并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值