信号量按其用途可分为哪几种,各自PV操作特性是什么
信号量按其用途可分为一般信号量和二元信号量
一般信号量:允许取值为非负整数,主要用于解决进程同步问题。
二元信号量:仅允许取值为0 和1,主要用于解决进程互斥问题。
PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:
P(S):
①将信号量S的值减1,即S=S-1;
②如果S³0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):
①将信号量S的值加1,即S=S+1;
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
二元信号量:
实际上把记录型信号量s 所需的值放到c 上,把P、V 操作中对信号量s 的增、减变成为对c 的增、减,把本来应该在s 队列上挂起的进程改为挂在s2 信号量上。信号量s1 的初值为1,用作为操作c 变量时的互斥信号量。
利用信号量和PV操作实现进程同步 PV操作是典型的同步机制之一。
用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。
用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。
使用PV操作实现进程同步时应该注意的是:
(1)分析进程间的制约关系,确定信号量种类。在保持进程间有正确的同步关系情况下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置哪些信号量。
(2)信号量的初值与相应资源的数量有关,也与P、V操作在程序代码中出现的位置有关。
(3)同一信号量的P、V操作要成对出现,但它们分别在不同的进程代码中。
热门标签: