Рубрики

Операционные системы | Синхронизация процессов | Вопрос 5

Команда атомарного извлечения и установки x, y безоговорочно устанавливает ячейку памяти x в 1 и извлекает старое значение x в y, не допуская какого-либо промежуточного доступа к ячейке памяти x. рассмотрим следующую реализацию функций P и V на двоичном семафоре.

void P (binary_semaphore *s) {
  unsigned y;
  unsigned *x = &(s->value);
  do {
     fetch-and-set x, y;
  } while (y);
}

void V (binary_semaphore *s) {
  S->value = 0;
}

Что из следующего верно?
(A) Реализация может не работать, если переключение контекста отключено в P.
(B) Вместо использования fetch-and-set может использоваться пара нормальной загрузки / сохранения
(C) Реализация V является неправильным
(D) Код не реализует двоичный семафор

Ответ: (А)
Пояснение: Давайте поговорим об операции P (). Он хранит значение s в x, затем выбирает старое значение x, сохраняет его в y и устанавливает x равным 1. Цикл while процесса будет продолжаться вечно, если какой-то другой процесс не выполнит V (), и устанавливает значение s равно 0. Если переключение контекста в P отключено, цикл while будет выполняться вечно, поскольку никакой другой процесс не сможет выполнить V ().

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

Операционные системы | Синхронизация процессов | Вопрос 5

0.00 (0%) 0 votes