Dijkestra提出了一项重要技术,用于管理复杂互斥问题的并发过程。他介绍了一种称为信号量的新同步工具。
信号量有两种类型-
二进制信号量
计数信号量
二进制信号量只能取值0和1。计数信号量可以采用非负整数值。
在信号量上定义了两个标准操作,即等待和信号。进入临界区由等待操作控制,从临界区退出则通过信号操作加以注意。等待信号操作也称为P和V操作。信号量(S)的操作如下:
等待命令P(S)将信号量值减1。如果结果值变为负值,则将P命令延迟到满足条件为止。
V(S)即信号操作将信号量值增加1。
在P(S)和V(S)中强制对信号量进行互斥。如果多个进程同时尝试P(S),将仅允许一个进程继续进行而其他进程将等待,这些操作的定义如下-
P(S)或wait(S):如果S> 0,那么 将S设置为S-1其他 阻止呼叫过程(即,等待S)
V(S)或信号(S):如果有任何进程在等待S 开始这些过程之一其他 将S设置为S + 1
信号量操作是作为操作系统服务实现的,因此等待和信号本质上是原子的,即一旦启动,这些操作的执行就不会中断。