1.介绍
它是进程或线程同步、互斥时遇到的问题,通过堆信号量进行PV操作来实现。
2.过程
消费者不能消费空的缓冲区,生产者不能向满的缓冲区产生数据。
那么在运行生产者代码的时候先P一下empty判断是否是满的,并且对缓冲区的访问也是互斥的,有一个互斥量;生产完之后就V一下通知缓冲区有内容。
消费者也是如此,通知缓冲区有空闲。
3.优点
- 利用了缓冲区,生产者处理的数据不直接给消费者,而是放在缓冲区中,降低了耦合。
- 支持并发,不需要等待。当然在缓冲区满时肯定会阻塞,空时阻塞。
- 忙闲不均?
4.具体应用示例
https://www.cnblogs.com/Rivend/p/12071128.html
生产者和消费者可以是类、函数、线程、进程等。
这里举了一个爬虫例子,一个函数作为生产者,生产url,一个函数作为消费者,处理url。