信号量是什么?可以这样简单的理解
来源:互联网 发布:超声影像工作站软件 编辑:程序博客网 时间:2024/05/07 13:03
老羊快跑微信公众号 内有老羊的《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)放在程序的最后呢,答案是可以的,但是多进程并发时,资源释放的太晚是不是会影响计算机的效率呢。
老羊快跑:一个关注操作系统教学、嵌入式开发、科技资讯的公众号
- 信号量是什么?可以这样简单的理解
- 文字也可以这样简单 这样优美的阅读
- 加密可以这样简单
- this指针可以这样理解
- 信号量的理解
- 对信号量的理解
- 信号量的理解
- 对信号量的理解
- 几何变换中的矩阵可以这样理解!
- 【学习】新手可以这样理解“云服务”
- 虚拟地址 物理地址还可以这样理解
- 信号量的简单使用
- 一个简单的信号量
- 其实URL重写也可以这样简单
- Java-加密可以这样简单(位运算)
- 加密可以这样简单(位运算)
- 原来WINDOWS可以这样的
- Nokia可以变成这样的
- android线性光效文字
- Queue的那些事(remove/poll, add/offer, element/peek)
- 第四周 项目3-单链表应用(3)
- GCC编译器的常用操作
- Leetcode405. Convert a Number to Hexadecimal十进制转十六进制
- 信号量是什么?可以这样简单的理解
- Adobe一系列软件快速切换语言(mac osx)
- C/C++内存管理详解
- 51nod 四级算法 4/74 P1051 最大子矩阵
- Python实现第一个神经网络
- VB2010连接 三种数据库 源代码
- 网易笔试题:最大的奇约数
- 数据库中关于preparedStatement和Statement分析
- Android入门六(Handler)