信号量是操作系统中用于互斥和同步机制的一个共享的整数变量。信号量仅可以由初始化、唤醒(Signal)和等待(Wait)三种操作访问。
对于给定的信号量S,等待操作Wait(S)(又称P操作)定义为:
if s>0 then (17) else挂起调用的进程
唤醒操作Signal(S)(又称V操作)定义为:
if 存在等待的进程 then 唤醒这个进程else (18)
给定信号量S,可以定义一个临界区来确保其互斥,即保证在同一时刻这个临界区只能够被一个进程执行。当S被初始化为1时,代码段
(19) :
临界区
(20) :
定义了一个临界区。
这样的临界区实际上是将共享数据和对这些数据的操作一起封装起来,通过其互斥机制一次只允许一个进程进入,这种临界区通常称为 (21) 。
17()
A.S:=0
B.S:=S+1
C.S:=S-1
D.S:=1
E.Signal(S+1)
F.Wait(S-1)
G.Signal(S)
H.Wait(S)