还是被常问的死锁问题

还是被常问的死锁问题

  1. 老师代码中死锁的问题,是不是因为程序运行中,连续调用了两次get 或set,使得第二次调用get时,get进入wait状态,然后调用set,当set调用完想调用get时,因为处于wait状态所以没有调用get而是调用的set,使得set也进入wait状态。

  2. 死锁有四个必要条件,请讲一下老师代码中死锁问题的具体情况,比如什么资源被占用了等

正在回答

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

3回答

同学你好,

    1、get是怎么进入等待状态的呢?

        get以为set未生产,所以才处于等待状态。

    2、老师代码中死锁是占用的什么资源?

这里的资源指的就是queue。

http://img1.sycdn.imooc.com//climg/5e623cdf0921c7fd07150233.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 万象天心 提问者 #1
    首先,有一个问题是到底是谁先进入等待状态。比如说get先等待(发生了什么使得get进入等待,是不是连着调用了两次get?),说明flag为false,然后调用set,flag变为true.然后想要调用get,由于get处于等待状态 无法调用,所以调用set,使得set进入等待状态,最终出现死锁
    2020-03-06 20:58:14
  • 好帮手慕小脸 回复 提问者 万象天心 #2
    同学你好,生产与消费进入等待状态是不分前后,这是一个随机的操作,按照同学的比如来说,是正确的。之前老师理解有误。非常抱歉 如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
    2020-03-07 11:32:01
好帮手慕小脸 2020-03-06 17:49:33

同学你好,

    1、这样理解也是可以的,同学也可以按照楼上同学的第一问来参考理解。当set进入等待状态,也就是生产者线程进入等待状态,这时flag是true,执行get方法。但是这时get方法中消费者线程也处于等待状态,那么消费者线程无法消费,此时就会产生死锁。所以需要使用调用notifyAll来释放锁。

    2、死锁有四个必要条件,请讲一下老师代码中死锁问题的具体情况,比如什么资源被占用了等?

结合以下代码来看:

    http://img1.sycdn.imooc.com//climg/5e621b880904915606750444.jpg

首先死锁的有四个必要条件。

    1、互斥使用:lockA和lockB都是独一份的,只能被一个线程使用

    2、不可抢占:假如put先抢到了,它使用着lockA呢,他需要lockB,但是put2里,lockB又在等着lockA,但put2方法里的lockB又不能去put里抢占lockA,只能等它用完自己放回去它才能用

    3、请求和保持:即当资源请求者在请求其他的资源的同时保持对原有资源的占有。也就是put中的lockA在等待lockB(请求其他的资源),但是,同时又持有这lockA(原有资源的占用)

    4、循环等待:他们相互循环调用,互相等待着lockA等着要使用lockB这个资源,但lockB资源中等着用lockA,然后就成了死循环

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 提问者 万象天心 #1
    第一问,get是怎么进入等待状态的呢 第二问,我大概明白死锁是怎么发生的,但是纳闷老师代码中死锁是占用的什么资源
    2020-03-06 18:22:20
无敌小糖糖万岁 2020-03-06 14:46:36

1、你可以这么理解的,当set进入等待状态,也就是生产者线程进入等待状态,这时flag是true,执行get方法。但是这时get方法中消费者线程也处于等待状态,那么消费者线程无法消费,此时就会产生死锁。所以需要使用调用notifyAll来释放锁。

2、产生死锁的四个必要条件

1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用

2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。

3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。

4、循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。

当这四个条件都满足的时候,就会产生死锁,希望能帮助到你,望采纳


  • 提问者 万象天心 #1
    朋友,你说的这个我都看过好多遍了。我问的是比较具体的
    2020-03-06 14:53:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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