操作系统 经典同步问题

1.生产者–消费者问题

分析:
·无论生产者、消费者使用缓冲池时应保证互斥使用(互斥信号量mutex)
·生产者和消费者间交叉有序:
有序的控制最根源在产品的数量上
需要设置两个信号量:
分别针对生产者、消费者设置不同的信号量,empty(空缓冲池数)和full(满缓冲池数)

程序:
消费者
在这里插入图片描述
生产者
在这里插入图片描述

当两个生产者同时的情况
由于m的值为1,第一个生产者到达,执行了wait(m),m的值为0,如果此时第二个人来再次执行wait(m)时,m的值减为-1会使第二个人阻塞,第二个人必须等到第一个人操作完后,释放m才能被唤醒继续操作,避免了两个生产者同时生产带来的问题。

生产者等待消费者情况
此时条件:e=0(空缓冲池为0),m=1,f=n(全为满缓冲池)

由上代码可知,生产者生产时先申请e(空缓冲),执行wait(e)后,e=-1阻塞,必须等到消费者取完后执行了signal(e),释放e后才会唤醒生产者继续操作。

2.哲学家就餐问题

在这里插入图片描述

分析:
筷子在此处为临界资源,在一段时间内只允许一个哲学家使用

如果每个哲学家都取得一只筷子,那么则会造成死锁问题

解决方法:

**数量控制:**至多只允许有四位哲学家同时去拿左边筷子,这样便可保证至少有一位科学家能够进餐,并在用完后释放两只筷子

采用AND信号量
仅当哲学家的左右两只筷子均可用时,才能允许他拿起筷子进餐。
在这里插入图片描述
IF编程控制
规定奇数号哲学家先拿左筷子后拿右筷子,偶数号哲学家反之,这样便能保证总会有一个哲学家能同时获得两只筷子。

3.读者–写者问题

分析:
合理的同步关系
多个读进程可同时读,写进程与任何其他进程不允许同时访问文件
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值