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)的位置会保证死锁?我想找一个例子,但似乎找不到