操作系统复习2.3.4-进程同步问题

文章讨论了多个并发控制问题,包括生产者-消费者模型的同步与互斥策略,多生产者-多消费者情况下的资源管理,以及读者-写者问题中的读写平衡和写饥饿解决方案。此外,还提及了吸烟者问题和哲学家进餐问题,这两个经典示例展示了如何避免死锁并确保线程安全。

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

生产者-消费者

系统中有一组生产者进程和一组消费者进程
两者共享一个初始为空,大小为n的缓冲区
缓冲区没满,生产者才能放入
缓冲区没空,消费者才能取出
互斥地访问缓冲区
在这里插入图片描述
互斥要在同步之后,不然会导致想要同步,但由于没有锁而导致死锁
遵循先V后P

多生产者-多消费者

在这里插入图片描述
多对多需要清楚互斥量是否为1,若为1可能可以不加互斥,若不为1则需要加,因为要避免覆写缓冲区,导致数据错误
同步需要梳理好前后关系,例如这里的盘子和水果

读者-写者

当有读者和写者两组并发进程,共享一个文件,读时只允许读,不允许写,写时不允许读和写
难点在怎么确定当前访问的进程是哪种进程
在这里插入图片描述
此处将互斥量套在检查count和赋值count上,但造成了读优先,且写饥饿

在这里插入图片描述
为了解决写饥饿,加入对写标志的同步操作,即当有写进程申请访问时,读文件进程只能等待,读写平衡法

吸烟者

三个抽烟者各自持有三种材料中的一种,一个供货商每次提供两种材料,抽烟者一凑齐材料就能抽,此处就涉及了线程同步问题
在这里插入图片描述
其实这里finish用做表示抽完才能放材料,设置三种材料作为变量即可

哲学家进餐

在这里插入图片描述
这里就不能常规的p操作检查两边的筷子能否拿起,因为同时并发会导致都吃不上饭
要想实现不死锁,需要让他们按一定顺序吃饭,如只有能拿起一双筷子的才能吃饭,不然就不能拿筷子
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值