Задача производителя-потребителя о синхронизации - PullRequest
0 голосов
/ 16 мая 2019

Я читал википедию о проблеме «производитель-потребитель» 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...