用信号量实现互斥。互斥是并发进程之间由于共享资源而形成的间接制约关系。
Var mutex : semaphore := 1; //初值为1
Begin Parbegin(由部分开始)
Process1: begin repeat(循环)
wait(mutex);//进入区(P操作)
critical section;//临界区(使用临界资源)
signal(mutex); //退出区(V操作)释放
remainder section;//剩余区
until false;
end;
Process2:begin repeat
wait(mutex)
critical section
signal(mutex);
remainder section
until false;
end;
parend(两个进程代码完全一致)
互斥需要调解两者使用资源的速度
在实现互斥时应注意 wait(mutex) 和signal(mutex) 必须成对地出现。缺wait(mutex)(申请资源)将会引起系统混乱,不能保证对临界资源的互斥访问。缺signal(mutex)将会使该临界资源永久不会释放(系统当中某些进程将永远处于阻塞状态)