Как определить семафор с занятым ожиданием решения - PullRequest
0 голосов
/ 21 мая 2011

Как определить семафор с занятым решением ожидания? Я получил что-то вроде этого

wait(Semaphore s){
s=s-1;
if (s<=0) {
    // add process to queue
    block();
}
}

signal(Semaphore s){
s=s+1;
if (s<0) {
    // remove process p from queue
    wakeup(p);
}
}

, но я не понимаю условие, требуемое в блоке сигнала

if (s)<0) {// удаляем процесс p из очереди wakeup (p);} </p>

почему мы проверяем, если (s <0) здесь </p>

1 Ответ

0 голосов
/ 16 июня 2011

Условие, вероятно, должно определить, есть ли какой-либо процесс, спящий (заблокированный) в очереди. Тем не менее, я думаю, что эти условия не верны, учитывая поведение двоичного семафора (семафор изначально с s == 1), псевдокод должен быть

wait(Semaphore s){ 
  s=s-1;
  if (s<0) {
    // add process to queue
    block();
  }
}

signal(Semaphore s){
  s=s+1;
  if (s<=0) {
    // remove process p from queue
    wakeup(p);
  }
}
...