生产者-消费者问题

1.介绍

它是进程或线程同步、互斥时遇到的问题,通过堆信号量进行PV操作来实现。

2.过程

消费者不能消费空的缓冲区,生产者不能向满的缓冲区产生数据。

那么在运行生产者代码的时候先P一下empty判断是否是满的,并且对缓冲区的访问也是互斥的,有一个互斥量;生产完之后就V一下通知缓冲区有内容。

消费者也是如此,通知缓冲区有空闲。

3.优点

  1. 利用了缓冲区,生产者处理的数据不直接给消费者,而是放在缓冲区中,降低了耦合。
  2. 支持并发,不需要等待。当然在缓冲区满时肯定会阻塞,空时阻塞。
  3. 忙闲不均?

4.具体应用示例

https://www.cnblogs.com/Rivend/p/12071128.html

生产者和消费者可以是类、函数、线程、进程等。

这里举了一个爬虫例子,一个函数作为生产者,生产url,一个函数作为消费者,处理url。

 

posted @ 2021-02-01 22:13  lypbendlf  阅读(87)  评论(0编辑  收藏  举报