为什么在使用互斥锁时需要条件变量?

时间:2016-12-26 18:13:44

标签: multithreading mutex semaphore condition-variable

我看了一个Wikipedia伪代码,显示了使用信号量和互斥量的消费者 - 生产者问题解决方案:

mutex buffer_mutex; 
semaphore fillCount = 0;
semaphore emptyCount = BUFFER_SIZE;

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

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

这个解决方案对我来说似乎很有效,但条件变量到底有多大帮助我们呢?根据我的理解,CV将阻塞调用线程直到满足某个条件,但是'down'操作或'lock'操作也会阻塞调用线程,如果值为0.所以关于整数与条件的关系或者还有更多吗? 感谢。

0 个答案:

没有答案