а.Интересно, почему вы пропустили утверждения B, F, G, H и J. Вы полагаете, что они не выполняются?Я думаю, что как только вы ответите b, вы легко ответите a.
b.Все семафоры могут ждать, но это то, как они работают, а не то, для чего они.Можете быть более конкретными?Семафоры могут использоваться для синхронизации (foo должно произойти после строки) и для исключения (между этими двумя разделами кода может выполняться только один раздел).Как вы думаете, для чего здесь используются два семафора?
c.Что потребуется для E, чтобы возможно выполнить до F?Это условие присутствует?Или посмотрите на это с другой стороны: что потребуется, чтобы предотвратить выполнение E до F?Это условие присутствует?
d.См. C.
Вот семафор, который используется для обеспечения того, что строка появляется после foo:
S = 0
process 1:
foo
signal(S)
process 2:
wait(S)
bar
А вот семафор, который используется только для одного из двух разделовкода выполняется одновременно:
S = 1
process 1:
wait(S)
foo
signal(S)
process 2:
wait(S)
bar
signal(S)
Видите ли вы разницу?Пересмотрите код в своей домашней работе и посмотрите, имеет ли он смысл сейчас.