目录
一、信号量机制
1.用户进程通过 一对原语 对 信号量 操作
一对原语:不可中断的、开/关中断指令,包括wait和signal (P、V操作)。
信号量:表示系统中某些资源的数量。
2.信号量机制:
(1)整型信号量:包括初始化,P操作,V操作;不满足“让权等待原则”。
(2)记录型信号量:用记录型数据结构表示信号量
void wait(signal s)
{
s.value--;
if(s.value<0)
block(s.L) //block将进程由运行态转为阻塞态,置于L等待就绪队列中
}
void Signal(signal s)
{
s.value++;
if(s.value<=0)
wakeup(s.L) //wakeup将进程由阻塞态转为运行态,将置于L等待就绪队列中的进程唤醒
}
二、利用信号量机制实现进程互斥、同步、前驱关系。
1.互斥:
(1)分析并发进程的关键活动,划定临界区。
(2)设置信号互斥量,初值为1.
(3)临界区前执行P,临界区后执行V,成对出现PV操作。
2.进程同步:
(1)分析同步关系,保证“一前一后”执行。
(2)设置同步信号量s,初值为0。
(3)“前操作” 后 执行V(s)。
(4)“后操作”前 执行P(s)。
3.前驱关系:
(1)为每一对前驱关系个设置一个同步变量。
(2)在“前操作” 后 对应的同步变量执行V操作。
(3)在“后操作” 前 对应的同步变量执行P操作。