我看了一个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.所以关于整数与条件的关系或者还有更多吗? 感谢。