信号量是什么?可以这样简单的理解

大家都知道,计算机有了操作系统后性能大幅度提升,其根本原因就在于实现了进程的并发运行。多个并发的进程彼此之间围绕着紧俏的资源产生了两种关系,同步或互斥。而信号量正式解决资源竞争的最有效途径。

比如记录资源的数量,等待资源的进程数,等待资源的进程阻塞队列在哪,当然最重要的是信号量还代表这个资源是互斥的。比如信号量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)放在程序的最后呢,答案是可以的,但是多进程并发时,资源释放的太晚是不是会影响计算机的效率呢。
————————————————
版权声明:本文为CSDN博主「老羊快跑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangkuiwu/article/details/52674809

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值