应用题
11.我们为某临界区设置一把锁W,当W=l时表示关锁,W=0时表示锁已打开。试写出开锁原语和关锁原语,并利用它们去实现互斥。
【正确答案】 (1)开锁原语:
unlock(W):
W:=0;
关锁原语:
lock(W);
if(W==1)do no_op;
W=1:
(2)利用开关锁原语实现互斥:
var W:semaphore:=0;
begin
parbegin
process:
begin
repeat
lock(W);
critical section
unlock(W);
remainder section
until false;
end
parend
【答案解析】