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