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

来源:互联网 发布:超声影像工作站软件 编辑:程序博客网 时间:2024/05/07 13:03

老羊快跑微信公众号  内有老羊的《200分钟PCB设计傻瓜教程》,免费观看

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

比如记录资源的数量,等待资源的进程数,等待资源的进程阻塞队列在哪,当然最重要的是信号量还代表这个资源是互斥的。比如信号量S=3代表资源目前还有3个,没有进程阻塞;S=-2代表资源已经都被占用,且阻塞队列中等待资源的进程有2个。

信号量是操作系统提供给用户使用的一种机制,帮助用户进程协调使用资源,用户编程的时候可以直接调用,不必自己设计。计算机对信号量只能执行 waitsignal这两种原子操作,即申请和释放信号量时无法被打断。下面看一个例题:

例:若有一售票厅只能容纳300人,当少于300人时,可以进入;否则,需在外等候。若将每一个购票者作为一个进程,请用Pwait)、Vsignal)操作编程,并写出信号量的初值。(强调:只有一个购票窗口,每次只能为一位购票者服务)

分析:题中有两类资源,售票厅和售票窗口,售票厅可以容纳300人,窗口只能服务1个人。用户到达后要想买到票,首先要进入售票厅,然后申请到窗口才行。因此用户需要获得两类资源才能成功购票。好了,我们定义两个信号量一个是S1,代表售票厅还能容纳的人数,一个是S2,代表窗口,它们的初始值一个是300,一个是1。程序如下:

解:semophore S1=330S2=1

    用户进程Pi {

                    WaitS1

                    进入大厅

                    WaitS2

                    窗口购票

                   退出购票窗口

                    SignalS2

                     退出大厅

                    SignalS1

}

       注意,申请的时候能不能把S1,S2的顺序调换呢?答案是不能的,因为如果某进程申请到了窗口(被叫号了),却无法进入大厅,那么其他人就无法购票,也就无法退出大厅,他也就一直进不去了。另外在释放过程中,能不能把siganl(S2)放在程序的最后呢,答案是可以的,但是多进程并发时,资源释放的太晚是不是会影响计算机的效率呢。


老羊快跑:一个关注操作系统教学、嵌入式开发、科技资讯的公众号



0 0
原创粉丝点击