消费者-生产者模型

1,概念

     本质上是用来解决资源的供求问题的,就是缓解供不应求(生产者太慢,消费者太快)和货物囤积(消费者太慢)

     使生产与消费达到一个相对稳定的状态。

2,321原则

       一种消费场所

                  消费者与生产者的交易场所

       两种消费角色

                    消费者与生产者

       三种消费关系

                      消费者与消费者(互斥)

                      消费者与生产者(同步与互斥)

                         互斥:因为生产者和消费者不能同时进入消费场所,就如超市不会在营业的时候搬运货物

                                    (可以通过互斥锁来实现)

                         同步:生产者和消费者进入消费场所的时间不一样,就如超市要营业和搬运货物在不同的时间进行。

                                     (可以通过条件变量来通知消费者什么时候营业了)

                      生产者与生产者 (互斥)

3,条件变量

            应用举例:当超市没有货物时,消费者多次消费都失败了,这显然是不合理的,当超市有货时给消费者

                              发送一个通知,这才是高效的方式,条件变量就可以完成这个任务。

           概念;

                              利用线程间共享的全局变量来进行同步操作的机制,一个线程执行等(等待条件变量成立)

                             一个线程执行发送信号(条件成立的信号),为了防止线程间的竞争,总是和互斥锁搭配使用,

                             等待线程中会先将锁释放,(因为另一个线程不获得锁就无法发送信号),收到信号后再获得锁。

        作用:条件变量与 互斥锁的组合,实现了消费者与生产者者的同步与互斥。

4,信号量

      实现消费者-生产者模型的另一个方法就是使用信号量和互斥锁来实现

      信号量通多PV 操作来控制信号量,通常生产者申请的信号量是一个非0正数,表示可以生产的数量

       为消费者申请一个值为初始值0的信号量,表示开始时不能消费

       生产-消费过程:

       1,生产者在生产前申请锁,然后使消费者的信号量+1,意思是生产一个资源后就可以让消费者消费了

            在解锁前还要将自己的信号量-1,表示自己可以生产的数量-1。

       2,消费者因为自己的信号量是0,一直等待,直到生产者给自己的信号量+1,然后将自己的信号情况二量-1,(又回到0)

            才往下执行,加锁,消费,解锁,将生产者的信号量+1,表示自己消费一个资源 ,生产者可生产数量+1。

      3,当生产者的信号量变为0时,就是情况二,当生产者的信号量不变时,就是情况三

            

            

情况一: 

    

生产者关心白色格子的数量,也就是自己还能生产几个

消费者关心红色格子的数量,也就是自己还能消费几个

情况二:

生产者生产的太多,就不生产了,避免了货物囤积

情况三:

     消费者消费的太快了,供不应求,就不能消费了

猜你喜欢

转载自blog.csdn.net/wm12345645/article/details/82390814