第二讲(三)经典的进程同步问题

本文探讨了信号量机制在进程管理中的应用,包括整型和记录型信号量的使用,通过打印机资源分配实例,详细解析了进程间的同步、互斥及前驱关系。并对比了生产者消费者、多生产者-多消费者及读者写者问题,讨论了哲学家进餐问题的解决方案。

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

信号量机制的引入

利用原语对信号量操作
在这里插入图片描述

整型信号量

在这里插入图片描述

记录型信号量

在这里插入图片描述
打印机例子
先把两个资源分配给p0,p1进程。这时p3和p4进程提出申请资源的操作,发现系统已经没有资源了,在wait原语中进入阻塞态。依次进入等待队列。
在这里插入图片描述
假设p0已经执行完了,value=-1,唤醒等待队列的最前面的那个进程p2
在这里插入图片描述
假设p2进程释放后,value=0,说明还有进程在等待资源,于是又唤醒队列里的一个进程p3,等待队列为空了
p3释放后,value=1,说明没有进程在等待资源了。
在这里插入图片描述
总结
在这里插入图片描述

信号量机制实现进程的同步、互斥、前驱关系

实现同步

在这里插入图片描述
在这里插入图片描述

实现互斥

在这里插入图片描述

实现前驱关系

在这里插入图片描述

比较

在这里插入图片描述

生产者消费者进程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多生产者—多消费者进程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

读者写者问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

潜在的问题就是读进程是优先的,主要读进程在读,写进程就会饿死

在这里插入图片描述
在这里插入图片描述

哲学家进餐问题

在这里插入图片描述
在这里插入图片描述
办法1
在这里插入图片描述
办法2:只有左右两只筷子都可以用时才拿起吃饭
当0号拿了筷子在吃饭时,其余请求的人都进入阻塞
在这里插入图片描述
0号在吃饭,4号申请,拿起啦左边的筷子,右边的筷子在0号那,所以4进入阻塞,等待另一只筷子。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值