Deadlock 在生产者/消费者中,为什么切换向上(互斥)和向上(填充)的顺序会导致死锁?
让我们以维基百科页面上的代码为例Deadlock 在生产者/消费者中,为什么切换向上(互斥)和向上(填充)的顺序会导致死锁?,deadlock,semaphore,producer-consumer,Deadlock,Semaphore,Producer Consumer,让我们以维基百科页面上的代码为例 semaphore mutex = 1; semaphore fillCount = 0; semaphore emptyCount = BUFFER_SIZE; procedure producer() { while (true) { item = produceItem(); down(emptyCount); down(mutex); putItemInto
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);
}
}
为什么在producer函数中交换up(互斥)和up(fillCount)的位置会保证死锁?我想找一个例子,但似乎找不到