同步:生产者/消费者没有锁定计数

时间:2013-02-28 06:56:36

标签: algorithm synchronization

以下代码来自维基百科:

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);
    }
}

我感到困惑的是为什么消费者和生产者中的down / up(fillCount)不在互斥体中。这是不是意味着它们同时被多于1个线程修改?

0 个答案:

没有答案