Рубрики

ВОРОТА | GATE-CS-2003 | Вопрос 80

Предположим, мы хотим синхронизировать два параллельных процесса P и Q, используя двоичные семафоры S и T. Код для процессов P и Q показан ниже.

Process P:
while (1) {
W:
   print '0';
   print '0';
X:
}
	
Process Q:
while (1) {
Y:
   print '1';
   print '1';
Z:
}

Операторы синхронизации могут быть вставлены только в точках W, X, Y и Z.

Что из следующего всегда приведет к выводу, начинающемуся с '001100110011'?

(A) P (S) в W, V (S) в X, P (T) в Y, V (T) в Z, S и T вначале 1
(B) P (S) в W, V (T) в X, P (T) в Y, V (S) в Z, S вначале 1, и T вначале 0
(C) P (S) в W, V (T) в X, P (T) в Y, V (S) в Z, S и T первоначально 1
(D) P (S) в W, V (S) в X, P (T) в Y, V (T) в Z, S вначале 1, и T вначале 0

Ответ: (Б)
Пояснение: P (S) означает ожидание на семафоре 'S', а V (S) означает сигнал на семафоре 'S'.

Wait(S)
{

    while (i <= 0) 

    --S;

}

  

  
Signal(S)
{

    S++;

}

Первоначально мы предполагаем, что S = 1 и T = 0 для поддержки взаимного исключения в процессах P и Q.
Поскольку S = 1, будет выполняться только процесс P, и ожидание (S) уменьшит значение S. Следовательно, S = 0.
В тот же момент, в процессе Q, значение T = 0. Поэтому в процессе Q управление будет зациклено в цикле while, пока процесс P не напечатает 00 и увеличит значение T, вызвав функцию V (T).
Пока элемент управления находится в процессе Q, семафор S = 0 и процесс P будут зациклены в цикле while и не будут выполняться до тех пор, пока процесс Q не напечатает 11 и не примет значение S = 1, вызвав функцию V (S).
Весь этот процесс будет повторяться, чтобы получить результат 00 11 00 11….

Таким образом, B является правильным выбором.

Пожалуйста, прокомментируйте ниже, если вы найдете что-то не так в вышеуказанном посте.

Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2003 | Вопрос 80

0.00 (0%) 0 votes