#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define num 4
//静态加载pthreadVC2.lib库文件
#pragma comment(lib, "pthreadVC2.lib")
//声明互斥信号量,五根筷子互斥使用
pthread_mutex_t chopstick[5] = { PTHREAD_MUTEX_INITIALIZER ,PTHREAD_MUTEX_INITIALIZER ,PTHREAD_MUTEX_INITIALIZER
,PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER };
//函数声明
void getChop(int i);
void layChop(int i);
void *philosophe(void *i);
//全局变量声明
//用来表示有多少个哲学家在拿筷子
int count =0;
int main()
{
//声明进程变量thread1
pthread_t thread1,t1,t2,t3,t4,t5;
//创建五个进程
//以此方式创建线程一直都是以顺序执行的,
/* for (int i = 0; i < 5; i++) {
pthread_create(&thread1, NULL, philosophe, (void*)(i+1));
pthread_join(thread1, NULL);
}*/
pthread_create(&t1, NULL, philosophe, (void*)1);
pthread_create(&t2, NULL, philosophe, (void*)2);
pthread_create(&t3, NULL, philosophe, (void*)3);
pthread_create(&t4, NULL, philosophe, (void*)4);
pthread_create(&t5, NULL, philosophe, (void*)5);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_join(t3, NULL);
pthread_join(t4, NULL);
pthread_join(t5, NULL);
system("pause");
return 0;
}
/*
哲学家方法,用于线程的创建
*/
void *philosophe(void *i) {
int index = (int)i;
getChop(index);
printf("哲学家%d开始进餐!\n", index);
layChop(index);
return NULL;
}
/*
哲学家拿起筷子的方法
*/
void getChop(int i) {
//当唤醒后,要去判断拿到筷子的人数是否达到四人
while (count<4) {
int ret_trylock1 = pthread_mutex_lock(&chopstick[i-1]);
//当有哲学家拿起第一个筷子的时候就表示有一个人在拿筷子了
if (!ret_trylock1) {
count++;
}
int ret_trylock2 = pthread_mutex_lock(&chopstick[i%5]);
if (!ret_trylock1 && !ret_trylock2) {
break;
}
}
}
//哲学家放筷子开始思考
void layChop(int i)
{
//把打印语句放在上面是考虑到当把锁释放后,会立即有线程对资源进行加锁,以为是程序逻辑有问题
printf("哲学家%d已经进餐完毕,开始思考\n", i);
pthread_mutex_unlock(&chopstick[i - 1]);
pthread_mutex_unlock(&chopstick[i % 5]);
//释放两只筷子资源后就使count-1,表示此时吃饭的人减少了一位
count--;
}

tbywt
- 粉丝: 20
最新资源
- 2023年3月三级网络笔试题.doc
- 基于灰狼算法的局部阴影遮挡下MPPT实现及仿真分析
- 基于YOLOv8的公共场所六分类危险武器检测系统:Python源码+Pyqt6界面+数据集 - 数据集
- COMSOL仿真中压力声学与固体力学模块的关键技术解析及应用实例
- 基于阿基米德优化算法的自定义路径规划:鲁棒性强、简单易实现、适应性广的应用解析 - Python 教程
- 光子学领域的Comsol光子晶体光纤与SPR PCF传感器及其谷自旋分离技术的应用研究 几何相位缺陷态
- 基于改进自适应蚁群算法MAACO的多智能体路径规划及其MATLAB实现
- 二自由度机械臂的RBF自适应控制与传统滑模控制对比研究
- LTC3542同步Buck变换器:高效电源管理芯片设计与应用 · Cadence 必备版
- 基于西门子1200与博图v16版本的锅炉控制系统:PLC程序、HMI组态画面与相关清单 · 工业自动化 说明
- 基于COMSOL的涂层剥离瞬态仿真与多体动力学接触粘附罚函数研究 多体动力学
- 分布式驱动电动汽车七状态估计模型:基于CKF与Dugoff轮胎力计算的联合仿真研究 (07月28日)
- 基于Carsim与Simulink联合仿真模型的车辆换道轨迹规划与跟踪模型实践
- 三相PWM整流器滑模整流控制(外环)的原理与应用研究
- Amesim在HEV热管理和电池热管理中的应用及大厂培训模型解析
- Qt5开发的西门子S7通信数据上传验证程序:支持SQL Server与MySQL的双数据库生产线追溯系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


