Рубрики

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

Предположим, мы хотим синхронизировать два параллельных процесса 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

Что из следующего гарантирует, что выходная строка никогда не будет содержать подстроку вида 01 ^ n0 или 10 ^ n1, где n нечетно?
(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 и T вначале 1
(C) P (S) на W, V (S) на X, P (S) на Y, V (S) на Z, S изначально 1
(D) V (S) в W, V (T) в X, P (S) в Y, P (T) в Z, S и T вначале 1

Ответ: (с)
Пояснение: P (S) означает ожидание на семафоре 'S', а V (S) означает сигнал на семафоре 'S'. Определение этих функций:

Wait(S)  {
   while (i 
Signal(S)  {
   S++ ; 
}

Первоначально S = 1 и T = 0 для поддержки взаимного исключения в процессах «P» и «Q».

Так как, S = 1, процесс «P» будет выполняться, а функция Wait (S) будет уменьшать значение «S». Итак, S = 0 сейчас.

Одновременно в процессе «Q» T = 0. Следовательно, управление процессом «Q» будет зависать в цикле while до тех пор, пока процесс «P» не напечатает «00» и не увеличит значение «T», вызвав функцию V (T).

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

Таким образом, процессы «P» и «Q» будут повторяться, чтобы выдать результат «00110011 ……».

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

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

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

0.00 (0%) 0 votes