信号量是什么?可以这样简单的理解
2016-09-26 22:05
239 查看
老羊快跑微信公众号
内有老羊的《200分钟PCB设计傻瓜教程》,免费观看
大家都知道,计算机有了操作系统后性能大幅度提升,其根本原因就在于实现了进程的并发运行。多个并发的进程彼此之间围绕着紧俏的资源产生了两种关系,同步或互斥。而信号量正式解决资源竞争的最有效途径。
比如记录资源的数量,等待资源的进程数,等待资源的进程阻塞队列在哪,当然最重要的是信号量还代表这个资源是互斥的。比如信号量S=3代表资源目前还有3个,没有进程阻塞;S=-2代表资源已经都被占用,且阻塞队列中等待资源的进程有2个。
信号量是操作系统提供给用户使用的一种机制,帮助用户进程协调使用资源,用户编程的时候可以直接调用,不必自己设计。计算机对信号量只能执行 wait和signal这两种原子操作,即申请和释放信号量时无法被打断。下面看一个例题:
例:若有一售票厅只能容纳300人,当少于300人时,可以进入;否则,需在外等候。若将每一个购票者作为一个进程,请用P(wait)、V(signal)操作编程,并写出信号量的初值。(强调:只有一个购票窗口,每次只能为一位购票者服务)
分析:题中有两类资源,售票厅和售票窗口,售票厅可以容纳300人,窗口只能服务1个人。用户到达后要想买到票,首先要进入售票厅,然后申请到窗口才行。因此用户需要获得两类资源才能成功购票。好了,我们定义两个信号量一个是S1,代表售票厅还能容纳的人数,一个是S2,代表窗口,它们的初始值一个是300,一个是1。程序如下:
解:semophore S1=330,S2=1;
用户进程Pi {
Wait(S1)
进入大厅
Wait(S2)
窗口购票
退出购票窗口
Signal(S2)
退出大厅
Signal(S1)
}
注意,申请的时候能不能把S1,S2的顺序调换呢?答案是不能的,因为如果某进程申请到了窗口(被叫号了),却无法进入大厅,那么其他人就无法购票,也就无法退出大厅,他也就一直进不去了。另外在释放过程中,能不能把siganl(S2)放在程序的最后呢,答案是可以的,但是多进程并发时,资源释放的太晚是不是会影响计算机的效率呢。
老羊快跑:一个关注操作系统教学、嵌入式开发、科技资讯的公众号
相关文章推荐
- 迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有
- 就是这么简单,QQ被盗了可以这样找回来!
- 用CMP访问数据库,简单的,但不理解为什么URL不修改仍然可以运行
- 关于什么是BI的简单理解
- 加密可以这样简单
- Spring定时任务的简单例子----非常实用----不需要做什么改动就可以使用哦
- 我们拿计算机来拆,去研究里头有什么,把核心的软件剖析一下,怎么写的,这样我就会Basce汇编语言了,我就可以去讲Basce和汇编的课了。为研究计算机怎么上显示器,我就去研究,当时我们的那台显示器
- 《代码重构 可以这么简单》 一 什么是不好的代码
- 【学习】新手可以这样理解“b/s”结构
- 【学习】新手可以这样理解“云服务”
- 几个简单程序加深你对多线程和信号量的理解
- 强悍的vbs,很多时候如果只是简单的写一个windows桌面工具,可以优先考虑一下vbs,js什么的。
- ARP欺骗攻击原理也可以这样理解
- 其实添加数据也可以这样简单——表单的第三步抽象(针对UI及后置代码)
- this指针可以这样理解
- 几何变换中的矩阵可以这样理解!
- 其实添加数据也可以这样简单——表单的第三步抽象(针对UI及后置代码)
- 百度笔试题2005题目大致是这样的: 第一部分选择题: 有几道网络相关的题目,巨简单,比如第一题是TCP、RIP、IP、FTP中哪个协议是传输层的......。有一道linux的 chown使用题目。其他的全是数据结构的题目!什么链,表
- 其实URL重写也可以这样简单
- 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站