信号量集

当利用信号量机制解决了单个资源的互斥访问后,我们讨论如何控制同时需要多个资源的互斥访问。信号量集是指同时需要多个资源时的信号量操作。

(1)AND型信号量集

AND型信号量集是指同时需要多个资源且每种占用一个资源时的信号量操作。当一段处理代码需要同时获取两个或多个临界资源时,就可能出现由于各进程分别获得部分临界资源并等待其余的临界资源的局面。各进程都会“各不相让”,从而出现死锁。解决这个问题的一个基本思路是:在一个原语中申请整段代码需要的多个临界资源,要么全部分配给它,要么一个都不分配给它。这就是AND型信号量集的基本思想。我们称AND型信号量集P原语为Swait(Simultaneous Wait),V原语为Ssignal(Simultaneous Signal)。在Swait时,各个信号量的次序并不重要,虽然会影响进程归人哪个阻塞队列,但是因为是对资源全部分配或不分配,所以总有进程获得全部资源并在推进之后释放资源,因此不会死锁。

下面是Swait和Ssignal的伪代码。

Swait(S1, S2, …, Sn) //P原语; {

while (TRUE)

{

if (S1 >=1 && S2 >= 1 && … && Sn >= 1)

{ //满足资源要求时的处理;

for (i = 1; i <= n; ++i) --Si;

//注:与wait的处理不同,这里是在确信可满足

//资源要求时,才进行减1操作;

break;

}

else

{ //某些资源不够时的处理;

调用进程进入第一个小于1信号量的等待队列Sj.queue;

(reset PC重置程序计数器)阻塞调用进程;

}

}

}

(2)一般“信号量集”

一般“信号量集”是指同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的信号量处理。由于—次需要n个某类临界资源,因此如果通过n次wait操作申请这n个临界资源,操作效率很低,并可能出现死锁。—般信号量集的基本思路就是在AND型信号量集的基础上进行扩充,在一次原语操作中完成所有的资源申请。进程对信号量Si的测试值为ti(表示信号量的判断条件,要求Si>ti即当资源数量低于ti时,便不予分配),占用值为di(表示资源的申请量,即Si=Si—di)。对应的P、V原语格式为:

Swait(S1, t1, d1; ...; Sn, tn, dn);

Ssignal(S1, d1; ...; Sn, dn);

一般“信号量集”可以用于各种情况的资源分配和释放。下面是几种特殊的情况:

1)Swait(S,d,d)表示每次申请d个资源,当资源数量少于d个时,便不予分配。

2)Swait(S,1,1)表示互斥信号量。

3)Swait(S,1,0)可作为一个可控开关(当S≥1时,允许多个进程进入临界区;当S=0时禁止任何进程进入临界区)。

由于一般信号量在使用时的灵活性,因此通常并不成对使用Swait和Ssignal。为了避免死锁可一起申请所有需要的资源,但不一起释放。

信号量集(主要是AND信号量)相关推荐

  1. 封装一个信号量集操作函数的工具

    信号量的概念参见这里. 与消息队列和共享内存一样,信号量集也有自己的数据结构: struct semid_ds { struct ipc_perm sem_perm;  /* Ownership an ...

  2. 【C语言】【unix c】信号量集(system v ipc)

    二.信号量集(system v ipc)信号量集就是数组,数组里的每个元素都是信号量的类型1.获取键值ftok(3)2.使用键值获取信号量集的idsemget(2)#include <sys/t ...

  3. Linux进程间通信第四讲 标准IPC之信号量集

    目录 4.3信号量集 4.3.1 概念和原理 4.3.2 使用 4.3信号量集 4.3.1 概念和原理 (不是用于进程间传递数据.而是用于进程间访问控制) 信号量集是一个信号量的集合,可以存放多个信号 ...

  4. 操作系统【信号量集机制、“读者-写者”问题】

    0.信号量机制应用引导篇.flv 1.信号量集机制解决读写问题深入分析.flv   03:00 2."读者-写者"问题之"顺序执行".flv   07:32 3 ...

  5. 操作系统_信号量集机制

    目录 1,AND型信号量集机制 基本思想 实现 与记录型信号量对比 应用实例 1,生产者消费者问题 2,哲学家进餐问题 2,一般信号量集机制 基本思想 实现 应用实例 1,读者写者问题 1,AND型信 ...

  6. 判断sem信号量为零_kernel.sem信号量调优

    一.kernel.sem 信号量 sem其实是semaphores的缩写,这个在oracle数据库配置的时候,会需要调整该值,对于一般的程序来说基本是用不到的.不过现网中也遇到过个别主机上zabbix ...

  7. linux下清理信号量,Linux下进程间通信方式——信号量(Semaphore)

    1.信号量 信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据 ...

  8. Linux共享内存和信号量,Linux共享内存和信号量的实例(2)

    nbsp;    //SLEEP 3秒,等待消费者进程执行完毕 printf("Poducer if over\n"); exit(0); } else { /*  消费者A进程  ...

  9. SystemV 信号量(一) —— SystemV信号量的相关操作函数(semget / semop /semctl)

    SystemV IPC 方案的相关内容都是通过 "房间密码"来创建房间,获取到房间的ID,后面其他进程也可以根据这个房间密码来拿到同一个房间的ID.这是理解下面这些操作函数的关键. ...

最新文章

  1. 央企名录、央企排名——国务院国有资产监督管理委员会央企名录
  2. 三步搭建Spring Cloud 服务注册
  3. mongodb单机部署
  4. Kafka如何做到全局有序
  5. opencv 画出各种滤波器二维图像 证明拉普拉斯滤波器是一个高通滤波器
  6. 危机中转型,如何获得领导的支持?
  7. 合肥工业大学机器人技术期末_机器人技术基础期末考试复习资料
  8. unity替换鼠标图标
  9. 我们为何要选择使用LINUX?--大家自己体会
  10. 使用python爬取号码归属地列表,制作握手包破解字典
  11. 吉林大学数据库系统原理期末复习笔记
  12. 如何消除苹果Mac电脑开机声音
  13. linux ddos防御攻击
  14. 如何在vscode上运行调试C++(最简单的方法)
  15. Linux下命令行打开word、excel、pdf文件
  16. 转自知识号新闻网的一个帖子
  17. 7620a路由mysql,7620A路由求助 - 新手入门及其它(软件) - 恩山无线论坛 - Powered by Discuz!...
  18. 工控机主机该怎么加固
  19. MySQL Transportable Tablespace
  20. Latex——Word公式转换

热门文章

  1. c语言中max代表什么,什么是C中的DBL_MAX?
  2. R语言基础统计分析:正态性检验、方差齐性检验、T检验、方差分析、秩和检验
  3. ORA-01186、ORA-01157、ORA-01111、ORA-01110 错误处理方法
  4. 4.12.4nbsp;约翰bull;梅纳德bull;凯恩斯
  5. python金融量化分析 | 闲杂笔记
  6. 支付宝SDK官方下载地址
  7. python for循环遍历涉及的相关问题及代码实现(非全部)
  8. in_array 二维数组
  9. Python开发-flask框架学习
  10. 一文看懂 LSTM(Long Short-Term Memory)