操作系统_信号量集机制

目录

1,AND型信号量集机制

基本思想

实现

与记录型信号量对比

应用实例

1,生产者消费者问题

2,哲学家进餐问题

2,一般信号量集机制

基本思想

实现

应用实例

1,读者写者问题


1,AND型信号量集机制

基本思想

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

实现

操作系统_信号量集机制_第1张图片

与记录型信号量对比

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

 

应用实例

 

1,生产者消费者问题

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

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

AND型信号量标准程序

操作系统_信号量集机制_第2张图片

 

2,哲学家进餐问题

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

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

操作系统_信号量集机制_第3张图片

AND型信号量标准程序

操作系统_信号量集机制_第4张图片

 

2,一般信号量集机制

基本思想

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

 

实现

操作系统_信号量集机制_第5张图片

 

应用实例

1,读者写者问题

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

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

操作系统_信号量集机制_第6张图片

一般信号量标准程序

读者:

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:写者进程结束,释放互斥信号量资源;

操作系统_信号量集机制_第7张图片

 

 

 

 

 

你可能感兴趣的:(大学课程)