我目前正在学习并发性。我理解锁和条件变量的用途,但在什么情况下每个锁需要多个条件变量?
答案 0 :(得分:0)
条件变量实际上是进程可以等待的队列(不消耗资源)。他们这样做是因为他们只能在特定条件成立时继续进行(因此名称)。 当不同类型的进程必须等待不同的条件保持时,多个条件变量可能是有用的。一个很好的例子是所谓的生产者 - 消费者问题 (http://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem), 当两种进程共享一个共同的FIFO缓冲区时 - 生产者将项目存入其中,消费者将其提取出来。生产者必须偶尔等到缓冲区至少有一个空槽来存放物品。同样,消费者可能必须等待缓冲区为空。这两种过程相互发出信号:当生产者存放物品时,它向消费者发出缓冲区不为空的信号;当消费者提取项目时,它向生产者发出缓冲区未满的信号。 虽然使用一个条件变量来解决问题并非不可能,但使用两个条件变量更自然(也更有效):一个用于生产者,一个用于消费者。
其他几个"问题"存在需要类似方法,例如读者 - 写作者和睡觉的理发师。