荷兰的著名计算机科学家Dijkstm把进程互斥的关键含义抽象成为信号量(Semaphore) 概念,并引入了在信号量上的P、V操作作为同步原语,(P和V分别是荷兰文的“等待”和 “发信号”两词的首字母)。
这里,信号量是个被保护的量,只有P、V操作和信号量初始化操作才能访问和改变它的值。
信号量是一种特殊的变量,它的表面形式 是一个整型变量附加一个队列;而且,它只能被特殊的操作(即P操作和V操作)使用。P操作和V操作都是原语。
P表示通过的意思,V表示释放的意思。
S是信号量;P、V操作如下;
P(S): S=S-1
如果S≥0,则该进程继续执行;
S<0,进程暂停执行,放入信号量的等待队列
V(S): S=S+1
如果S>0,则该进程继续执行;
S≤0, 唤醒等待队列中的一个进程