发生死锁的原因是线程处于等待状态,那为什么在运行到生产13时候产生死锁

发生死锁的原因是线程处于等待状态,那为什么在运行到生产13时候产生死锁

1,前面的生产1消费1,生产2消费2 都是正常的呀?到了13这为什么就不行?

2.死锁是因为wait,那为什么生产和消费都处于wait?而不是一方处于等待呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2018-03-27 17:27:08

不一定是到13,这都是随机的。哪个线程先执行的都不确定。例如生产者处于wait() 时,一直没有人来唤醒,所以也就生产不了了。那消费当然也消费不成功啊。那不得是在wait()嘛。祝:学习愉快

  • 提问者 liqihang #1
    生产者处于wait时,flag肯定等于true,也就是容器里有东西,那么该线程会进入等待池,cpu会让别的线程去使用,消费者线程判断flag=true,就能执行了啊
    2018-03-27 22:30:07
  • 好帮手慕雪 回复 提问者 liqihang #2
    嗯“消费者线程判断flag=true,就能执行了。”消费就消费完了,那然后呢?谁再把生产者叫醒呢?处于wait()得有人唤醒呀,不是只判断flag就行了的
    2018-03-28 11:11:33
  • 那为什么13之前的没有唤醒也执行了?
    2018-03-28 17:28:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师