“如果关键区域被锁定,则等待调用通常会导致进程停滞,直到允许信号通过为止(即,直到另一个进程发出信号为止)。但是,也有信号的实现调用wait -Method时,它具有第二个布尔参数“ blocking”。
如果将阻塞参数设置为'false',则等待的调用不会阻塞-调用进程将接收一个返回值。
如果当前无法传递信号量,则此返回值为'false',否则为'true'。接收到一个进程的返回值“ true”,它通过了信号灯,ergo wait被执行。 “
我已经编写了代码,但是我真的不确定如何实现其中的“阻塞”部分。特别是如何给一个过程一个返回值。对此,我们将不胜感激。
该代码为C伪代码。
struct semaphore {
int value;
list waiting_processes;
boolean lock;
}
wait(semaphore s, boolean blocking):
while (TestAndSet(s.lock))
{noop;}
s.value = s.value - 1;
if (s.value < 0 && blocking == TRUE) {
s.waiting_processes.add(get_pid());
s.lock = FALSE;
block();
}
else {
s.lock = FALSE;
}