如何更改wait()-信号量包含布尔值的方法

时间:2019-05-19 22:06:45

标签: c semaphore

“如果关键区域被锁定,则等待调用通常会导致进程停滞,直到允许信号通过为止(即,直到另一个进程发出信号为止)。但是,也有信号的实现调用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;
}

0 个答案:

没有答案