Рубрики

ВОРОТА | GATE-CS-2006 | Вопрос 79

Барьер — это конструкция синхронизации, в которой набор процессов синхронизируется глобально, т.е. каждый процесс в наборе достигает барьера и ожидает прибытия всех остальных, а затем все процессы покидают барьер. Пусть число процессов в наборе равно трем, а S — двоичный семафор с обычными функциями P и V. Рассмотрим следующую реализацию C барьера с номерами строк, показанными слева.

void barrier (void) {

1:   P(S);
2:   process_arrived++;
3.   V(S);

4:   while (process_arrived !=3);

5:   P(S);
6:   process_left++;

7:   if (process_left==3) {

8:      process_arrived = 0;
9:      process_left = 0;
10:  }
11:  V(S);
}

Переменные process_arrived и process_left являются общими для всех процессов и инициализируются нулями. В параллельной программе все три процесса вызывают функцию барьера, когда им требуется глобальная синхронизация.

Что из нижеперечисленного устраняет проблему в реализации?
(A) Строки с 6 по 10 просто заменяются на process_arrived–
(B) В начале барьера ждет первый процесс, чтобы войти в барьер
пока process_arrived не станет равным нулю, прежде чем приступить к выполнению P (S).
(C) Переключение контекста отключено в начале барьера и повторно включено в конце.
(D) переменная process_left делается приватной, а не общей

Ответ: (Б)
Объяснение:
Шаг «2» не должен выполняться, когда процесс входит в барьер второй раз, пока другие два процесса не завершили свой 7-й шаг. Это сделано для того, чтобы переменная process_arrived стала больше 3.

Таким образом, когда переменная process_arrived становится равной нулю, а переменная process_left также становится равной нулю, проблема тупиковой ситуации будет решена.

Таким образом, в начале барьера первый процесс для входа в барьер ждет, пока process_arrived станет равным нулю, прежде чем приступить к выполнению P (S).

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

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

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

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

ВОРОТА | GATE-CS-2006 | Вопрос 79

0.00 (0%) 0 votes