生产-消费者问题

接上一篇的线程同步问题,这一篇是上一篇的应用,

要实现一个生产-消费者模型,首先,分析它的组成:生产者(producer类),消费者(consumer类),还有一个它们两共享的资源;

一开始我想的是在创建一个资源库类,但其实没必要,直接在producer和consumer两个类共享一个list对象即可!这样既可以使producer和consumer共同访问,又可以实现同步的对象唯一性。

然后是它们之间的联系,由于这个模型要实现,生产者不断地向资源库中生产资源,消费者不断地消耗资源,同时值得注意的是,资源库资源不能小于0,也不能超过最大容量;

那么这就要求,生产者和消费者两个线程需要同步,从而在资源要小于0时让消费者进入等待,资源要溢出时让生产者进入等待。

等待状态就是通过wait()方法实现,wait()调用即会让当前线程进入等待状态。

既然让它们等待,那么该在何时将它们唤醒呢?

其实,只要在每一次消费后都唤醒就可以,因为notify()会随机地唤醒一个持有相同锁的等待wait线程,如果没有wait线程则会自动忽略。

producer类代码如下,注意在同步代码块中进行生产等活动

consumer类也类似

 

最后,在主函数中创建几个生产者线程和几个消费者线程,生产-消费模型就实现了

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值