В этом простом примере результат тот же, и вы не будете испытывать голод или тупик (даже если вторая версия consumer
определенно плохая практика).
Рассмотрим более сложную ситуацию (это не должно происходить), когда у вас есть ошибочный потребитель, и у вас есть код между up(emptyCount)
и up(mutex)
, например:
up(emptyCount)
// time-consuming code
up(mutex)
В этом случае у вас, вероятно, будет больше producer
с ожиданиядля выпуска mutex
, который не является необходимым.Теперь рассмотрим еще худшую ситуацию, когда вам приходится иметь дело с другим семафором между этими двумя инструкциями: в худшем случае это может привести к голоданию.