|
信号量机制主要有整型信号量、记录性信号量、信号量集机制。
|
|
|
|
信号量是一个整型变量,根据控制对象的不同赋予不同的值。信号量可分为以下两类。
|
|
|
(1)公用信号量。实现进程间的互斥,初值为1或资源的数目。
|
|
|
(2)私用信号量。实现进程间的同步,初值为0或某个正整数。
|
|
|
信号量S的物理意义为:S≥0,表示某资源的可用数;S<0,其绝对值表示阻塞队列中等待该资源的进程数。P、V操作是实现进程同步与互斥的常用方法。
|
|
|
P操作定义:S:=S-1,若S≥0,则执行P操作的进程继续执行;否则,若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。
|
|
|
V操作定义:S:=S+1,若S>0,则执行V操作的进程继续执行;否则,若S≤0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,执行V操作的进程继续执行。
|
|
|
|
令信号量的初值为1,当进程进入临界区时执行P操作,退出临界区时执行V操作。则进入临界区的代码段如下。
|
|
|
|
|
进程的同步是由于进程间合作而引起的相互制约问题。要实现进程的同步,可用一个信号量与消息联系起来。当信号量的值为0时表示消息未产生,当信号量的值为非0时表示希望的消息已经存在。假定用信号量S表示某条消息,进程可以通过调用P操作测试消息是否达到,调用V操作通知消息已经准备好。
|
|
|