有关同步的生产者-消费者问题

时间:2019-05-16 13:59:28

标签: c multithreading semaphore producer-consumer

我阅读了有关生产者-消费者问题https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem

的维基百科。

它提到在下面的代码中,当只有一个生产者和消费者时,它可以正常工作。 我的问题是,如果生产者在做up(fillCount);而消费者在做down(fillCount);,那么结果仍然正确吗?因为我认为这不是原子写操作。

semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space

procedure producer() 
{
    while (true) 
    {
        item = produceItem();
        down(emptyCount);
        putItemIntoBuffer(item);
        up(fillCount);
    }
}

procedure consumer() 
{
    while (true) 
    {
        down(fillCount);
        item = removeItemFromBuffer();
        up(emptyCount);
        consumeItem(item);
    }
}

0 个答案:

没有答案