2016-10-19 9 views
0

Ответ на мою книгу - х.Счетный семафор имеет значение -x. Сколько существует количество ожидающих процессов?

Но как это возможно? Я только что узнал от Differnce between Counting and Binary Semaphores, что подсчет семафоров имеет положительное значение, так что несколько процессов могут получить доступ к критическому разделу. Итак, в этом случае - как можно сказать, что процессы x ждут, потому что при достижении 0 следующий сигнал ожидания будет занят - подождите процесс, а значение семафора никогда не может быть меньше 0.

Теперь я там думаю, может быть вторым сценарием. Как подсчитывать семафор инициализируется 1. Теперь, когда доступ обработать его, он становится 0. Далее в засаде, если мы пишем,

while(s <= 0); 

, то следующий процесс будет сделать это -1. Таким образом, ожидание одного процесса делает значение семафора -1.

Поэтому я могу заключить, что для -x, x процессов ожидают!

Может кто-нибудь уточнить, прав я или нет? Любая помощь приветствуется. Заранее спасибо.

ответ

4

Подсчет семафор реализован, как показано ниже:

struct semaphore{ 
      int value; 
      Queue L; 
      } 


Здесь «значение» переменная может принимать положительное, отрицательное или «0» в качестве значения в зависимости от ее исходного значения и числа процессов пытались доступ к ней. Начальное значение переменной «value» указывает количество процессов, которые могут обращаться к нему одновременно. Метод

Ожидания() реализуются как:

wait(semaphore s){ 
      s.value--; 
      if(s.value < 0){ 
       put the process in the queue s.L; 
       sleep(); 
       } 

Таким образом, когда процесс пытается получить доступ к семафору и, если значение становится меньше, чем «0», она будет идти спать, как не больше разрешения не является чтобы получить доступ к ресурсу.
Следовательно, количество попыток процессов доступа к семафору, которые много раз его значение будет уменьшаться, после того, как значение будет отрицательным, процессы будут ждать в очереди ожидания до тех пор, пока не проснутся методом signal(), абсолютное значение, равное количеству процессов, которые безуспешно пытались получить доступ к нему.

+0

Это то, что я искал. Благодарю. :) – lU5er