Нужен ли нам мьютекс в этом случае? - PullRequest
0 голосов
/ 09 ноября 2018

Википедия решение для множественной проблемы Производитель-Потребитель использует и мьютексы, и семафоры.

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 , почему бы просто не использовать двоичный семафор, который это обеспечивает? То есть мы можем покончить с мьютексами, если в этом примере будем использовать двоичные семафоры?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...