Википедия решение для множественной проблемы Производитель-Потребитель использует и мьютексы, и семафоры.
mutex buffer_mutex;
semaphore fillCount = 0;
semaphore emptyCount = BUFFER_SIZE;
procedure producer()
{
while (true)
{
item = produceItem();
down(emptyCount);
down(buffer_mutex);
putItemIntoBuffer(item);
up(buffer_mutex);
up(fillCount);
}
}
procedure consumer()
{
while (true)
{
down(fillCount);
down(buffer_mutex);
item = removeItemFromBuffer();
up(buffer_mutex);
up(emptyCount);
consumeItem(item);
}
}
Причиной использования мьютекса является принудительное взаимное исключение, когда в критическом разделе находятся несколько производителей и потребителей. Мой вопрос таков: поскольку в любом случае цель состоит в том, чтобы в критической секции иметь поток single , почему бы просто не использовать двоичный семафор, который это обеспечивает? То есть мы можем покончить с мьютексами, если в этом примере будем использовать двоичные семафоры?