Я читал википедию о проблеме «производитель-потребитель» https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem
В ней упоминалось, что в приведенном ниже коде все работает нормально, когда есть только один производитель и потребитель.Мой вопрос заключается в том, что если производитель делает up(fillCount);
, а потребитель делает down(fillCount);
, то результат все равно правильный?потому что, на мой взгляд, это не атомарная операция записи.
semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space
procedure producer()
{
while (true)
{
item = produceItem();
down(emptyCount);
putItemIntoBuffer(item);
up(fillCount);
}
}
procedure consumer()
{
while (true)
{
down(fillCount);
item = removeItemFromBuffer();
up(emptyCount);
consumeItem(item);
}
}