Рубрики

ВОРОТА | Gate IT 2008 | Вопрос 51

Ниже приведен код с двумя потоками, производителем и потребителем, которые могут работать параллельно. Кроме того, S и Q являются двоичными семафорами, оснащенными стандартными операциями P и V.

semaphore S = 1, Q = 0;
integer x;

производитель: потребитель:
в то время как (правда) делать в то время как (правда) делать
P (S); P (Q);
х = производить (); потреблять (х);
В (Q); V (S);
сделано

Какое из следующих утверждений о программе выше?
(A) процесс может зайти в тупик
(B) Один из потоков может голодать
(C) Некоторые из предметов, произведенных производителем, могут быть потеряны
(D) Значения, сгенерированные и сохраненные в «x» производителем, всегда будут использованы до того, как производитель сможет сгенерировать новое значение.

Ответ: (D)
Объяснение: Семафор — это аппаратная или программная переменная тега, значение которой указывает состояние общего ресурса. Его цель — заблокировать используемый ресурс. Процесс, который нуждается в ресурсе, проверит семафор для определения статуса ресурса, после чего будет принято решение продолжить. В многозадачных операционных системах действия синхронизируются с использованием методов семафоров.
ожидание и сигнал определяются на семафор. Вход в критическую секцию контролируется операцией ожидания, а выход из критической области обеспечивается сигнальной операцией. Ожидание, сигнальные операции также называются операциями P и V. Манипулирование семафором (S) происходит следующим образом:

1. Команда ожидания P (S) уменьшает значение семафора на 1. Если результирующее значение становится отрицательным, то команда P задерживается до тех пор, пока условие не будет выполнено.
2. Операция сигналов V (S) ie увеличивает значение семафора на 1.

Решение:

Потребитель может потреблять только после того, как производитель произвел товар, а производитель может произвести (кроме первого раза) только после того, как потребитель потребил товар.

Давайте объясним работу этого кода.
Упоминается, что Producer и Consumer работают параллельно.

Режиссер:

st1 — значение S равно 1, P (S) на S равно 0 и
st2 — и затем x элемент произведен.
st3 — значение Q равно 0. V (Q) на Q делает его 1.

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

Потребитель:

P (Q) на Q делает Q = 0 и затем потребляет предмет.
V (S) на S,
теперь вместо того, чтобы изменить значение S на 1, потребитель пробуждает заблокированный процесс в очереди Q. Следовательно, процесс P пробуждается. P возобновляется со st2, так как он был заблокирован в операторе 1. Таким образом, P теперь производит следующий элемент. Таким образом, потребитель потребляет товар до того, как производитель произведет следующий товар.
Правильный вариант — (D).

Выбор этого вопроса:

А) тупик не может возникнуть, если и производитель, и потребитель работают на разных семафорах (без удержания и ожидания)
Б) Никакого голодания не происходит, потому что есть изменение между Р и Потребителем, что также заставляет их ограничивать ожидание.
(C) Некоторые из предметов, произведенных производителем, могут быть потеряны, но это невозможно.

Ссылка:
http://espressocode.top/mutex-vs-semaphore/

Это решение предоставлено Nitika Bansal
Тест на этот вопрос

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

ВОРОТА | Gate IT 2008 | Вопрос 51

0.00 (0%) 0 votes