考研操作系统-----进程同步互斥经典问题仅仅作为王道哔站课程讲义作用)

目录

1.生产者消费者问题

2. 多生产者-多消费者模型

3.吸烟者问题 

4.读者 写者问题

 5.哲学家进餐问题

6.管程


1.生产者消费者问题

 消费者进程从缓冲区拿走数据。缓冲区有空闲的时候,生产者就可以继续生产,所以,当消费者从缓冲区拿走数据的时候,如果有生产者处于阻塞状态,消费者应该将生产者唤醒,让其进入就绪态,但是回到就绪态,不意味着生产者会立即写数据1

缓冲区是临界资源必须互斥访问,不然会发生数据覆盖。

分析pv操作: 

 

 

 代码实现:

 执行V操作的进程会唤醒相应的执行P操作的进程。

同步和互斥的执行顺序能颠倒吗?

 

p顺序不可颠倒,可能出现死锁问题。 

能否将使用产品的带啊放入pv操作之间,答案是可以的,但是这就造成了临界区间的代码变长,锁的时间也会变长, 不利于各个进程交替使用临界区资源。

2. 多生产者-多消费者模型

多指多类,所生产所消费的产品类型不一样。

 

 

代码实现:

 

 父母在放入水果前首先要检查一下盘子是否为空,对盘子进行一个p操作,放入水果后,对水果这个信号量进行一个V操作,唤醒相应的水果P操作的进程,然后对盘子信号量进行V操作,唤醒对盘子信号量相应的P进程。

儿女检查是否有水果,拿走后对盘子进行V操作告诉盘子为空。 

这就是同步关系的实现。对于放入水果和取走水果的过程是互斥的,只能有一个进程在放入或者拿走,所以要对临界区资源进行上锁:

 

 

 

 

 可能会产生数据覆盖

 

 

3.吸烟者问题 

生产者:可能生产三种不同类型的产品

实现:

提供者:

供应者:

4.读者 写者问题

可以多个读者读:

不会更改数据,多个读是可以允许的。更改包括清空,所以消费者不能。

写者不可以 

问题分析:

这种没有办法实现读者与读者不可以同时访问这个共享文件的操作:解决:

解决办法,再设置一个信号量:

 

解决了写者解饿问题: 

 5.哲学家进餐问题

无根筷子,代表五个临界资源,每个哲学家要两个临街资源 

哲学家两件事:

方案②

方案三:

6.管程

类似于类。

管城中定义的数据结构,只能通过调用管城的函数来实现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值