操作系统_信号量集机制

目录

1,AND型信号量集机制

基本思想

实现

与记录型信号量对比

应用实例

1,生产者消费者问题

2,哲学家进餐问题

2,一般信号量集机制

基本思想

实现

应用实例

1,读者写者问题


1,AND型信号量集机制

基本思想

  • 将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放;(类似于数据库中的事务)
  • 对若干个临界资源的分配,采取原子操作方式要么全部分配到进程,要么一个也不分配;
  • 为此,在wait操作中,增加了一个“AND”条件,故称为AND同步;

实现

与记录型信号量对比

  • 将所有的临界资源都当作函数参数,不需要考虑顺序。函数体中选取相应的参数进行调用;
  • 要么不使用临界资源,要么一次请求所有需要的资源;
  • 绑定的内容多,效率比较低;

 

应用实例

 

1,生产者消费者问题

记录型信号量标准程序(需要注意顺序)

详细介绍参考@&再见萤火虫&【操作系统_生产者消费者问题】

AND型信号量标准程序

 

2,哲学家进餐问题

记录型信号量标准程序之一(注意一个哲学家拿筷子的顺序,要与其他哲学家拿筷子的顺序不同)

详细介绍参考@&再见萤火虫&【操作系统_哲学家进餐问题】

AND型信号量标准程序

 

2,一般信号量集机制

基本思想

在AND型信号量基础上,一次可申请多个单位资源。

 

实现

 

应用实例

1,读者写者问题

记录型信号量标准程序(需要区分是否为第一位读者)

详细介绍参考@&再见萤火虫&【操作系统_读者写者问题】

一般信号量标准程序

读者:

Swait

  • L,1,1:L记录读者进程数目,阈值为1,每个读者进程消耗一个资源(L-1);
  • mutex,1,0: 互斥信号量阈值为1,每个读者进程消耗0个资源;(由于AND型信号量保证了所有需要资源获取的原子性,因而不需要加读锁Rmutex来保证临界资源readcount的访问;    可以用读者进程数目L来表示是否有读者进程正在访问,从而保证读者和写者进程的互斥,因而不需要加写锁Wmutex;   因而读者进程可以不需要消耗mutex资源 )

Ssignal

  • L,1:L读者进程释放,数目加一;

 写者:

Swait:

  • mutex,1,1:消耗互斥资源mutex(主要用于写者进程之间的互斥),每次消耗1;
  • L,RN,0:读者进程数目L,当L==RN时(没有读者进程),才允许写者进程运行,每次消耗0个;

Ssignal: 

  •  mutex,1:写者进程结束,释放互斥信号量资源;

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值