Я изучал бинарные семафоры, когда возник следующий вопрос:
Предположим, что есть 3 параллельных процесса и 3 бинарных семафора... Семафоры инициализируются как S0=1, S1=0, S2=0. Процессы имеют следующий код:
Process P0: Process P1: Process P2:
while (true){ wait(S1); wait(S2);
wait (S0); release (S0); release(S0);
print '0';
release (S1);
release (S2);
}
Теперь вопрос в том, сколько раз процесс будет печатать 0 ?
Позвольте мне объяснить, как я это решал... предположим, что первые три оператора трех процессов выполняются одновременно! т. е. оператор while процесса p0, ожидание (S1) процесса p1 и ожидание (S2) процесса P2. и P2 будут заблокированы. Затем будет выполнено ожидание (S0) процесса P0. Когда это происходит, значение S0 становится равным 0, а процесс P0 переходит в заблокированное состояние, в результате чего все процессы будут заблокированы и заблокированы!! Но, к сожалению, это не ответ. . Подскажите, пожалуйста, где я ошибаюсь и как продвигается решение? :|
ИЗМЕНИТЬ:
Я ошибся в своем подходе к бинарным семафорам... они могут принимать только 0 и 1!