信号量

转载自http://media.openedu.com.cn/media_file/courseware/czxt/dx/dx.html

1.什么是信号量?

信号量一般是由两个成员组成的数据结构,其中一个成员是整型变量,表示该信号量的值,另一个是指向PCB的指针。当多个进程都等待同一信号量时,它们就排成一个队列,由信号量的指针项指出该队列的头,而PCB队列是通过PCB本身所包含的指针项进行链接的。最后一个PCB(即队尾)的链接指针为0。下图表示信号量的一般结构以及信号量上PCB队列的情况,因为采用了记录型数据结构,这种信号量也称作记录型信号量。

信号量的值是与相应资源的使用情况有关的。

当它的值大于0时,则表示当前可用资源的数量

当它的值小于0时,则其绝对值表示等待使用该资源的进程个数,即在该信号量队列上排队的PCB的个数。


2.信号量的限制

信号量的操作有如下严格限制

① 信号量可以赋初值,且初值为非负数。信号量的初值可由系统根据资源情况和使用需要来确定。在初始条件下,信号量的指针项可以置为0,表示队列为空。

② 在使用过程中,信号量的值可以修改,但只能由P、V操作来访问,不允许通过其他方式来查看或操纵信号量。


3.P操作和V操作

P操作设信号量为S,对S的P操作为申请资源,记为P(S)。现一般称为down操作

P(S):顺序执行下述两个动作:

①信号量的值减1,即S=S-1;

②如果S≥0,则该进程继续执行;

如果S<0,则把该进程的状态置为阻塞态,把相应的PCB链入该信号量队列的末尾,并放弃处理机,进行等待(直至其它进程在S上执行V操作,把它释放出来为止)。


V操作设信号量为S,对S的V操作为释放资源,记为V(S)。现一般称为up操作。

V(S):顺序执行下述两个动作:

①S值加1,即S=S+1;

②如果S>0,则该进程继续运行;

如果S≤0,则释放信号量队列上的第一个PCB(即信号量指针项所指向的PCB)所对应的进程(把阻塞态改为就绪态),执行V操作的进程继续运行。


4.用信号量解决生产者消费者问题

http://media.openedu.com.cn/media_file/courseware/czxt/sf/asf/1.swf


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值