|
|
1
83
|
|
|
2
5
|
|
|
3
3
monitor . produced-consumer problem 是其中之一。如果我们想实现一个消费者线程从与生产者共享的缓冲区读取项目,我们应该用互斥体保护缓冲区,但在不使用条件变量的情况下,我们应该锁定互斥体,检查缓冲区并读取项目(如果它不为空),解锁并等待一段时间,再次锁定并继续。如果缓冲区经常为空(忙于等待),这是浪费时间,而且会有大量的锁定和解锁以及睡眠。 我们需要的生产者-消费者问题的解决方案必须更简单、更高效。监视器(互斥体+条件变量)在这里对我们有所帮助。我们仍然需要一个互斥体来保证互斥访问,但条件变量可以让我们休眠并等待特定条件。这里的条件是生产者向缓冲区添加一个项目。生产者线程通知消费者线程缓冲区中有和项,消费者唤醒并获取该项。简单地说,生产者锁定互斥体,将一些东西放入缓冲区,通知消费者。消费者锁定互斥体,在等待条件时休眠,当缓冲区中有东西时醒来,并从缓冲区中获取项目。这是一个更简单、更有效的解决方案。
|
|
|
Iceman · 等待条件变量时的信号计数器 13 年前 |