pv操作同步过程
对信号灯状态进行改变,P调用一次-1,V调用一次+1。
P操作:
p(s)是一个原语操作,p操作执行 s– ,若s为负数,调用p(s)的进程被阻塞,放到等待队列q中。
p(s)
{
s- -;
if (s < 0)
{
保留调用进程的CPU现场;
将进程的pcb插入到s的等待队列;
把进程变为“等待状态”;
转到进程调度;
}
}
V操作
v(s)刚好与p(s)操作相反,v操作执行 s++ ,若s为大于0,继续执行;s <=0,从信号灯等待队列移出一个进程,解除等待状态,返回本程序继续执行。
v(s)
{
s++;
if (s <= 0)
{
移出s等待队列首元素;
将该进程的pcb插入就绪队列;
设置该进程为“就绪状态”;
}
进程互斥的实现
上锁原语顺利通过可进入临界区CSa或者CSb。
1、使用上锁原语与开锁原语解决并发进程互斥问题:
main()
{
int w