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