面试:“必然”引起“死锁”的一段代码。

2018 年 5 月 23 日
 1cming

这个必然让我有点疑惑,A 等待 B,B 等待 A 这种还有意外会发生吗?求教。

10332 次点击
所在节点    Java
33 条回复
ryd994
2018 年 5 月 23 日
@roychan
@John60676 哲学家就餐只是可能死锁,并不能保证死锁。如果某个哲学家手特别快,在别人反应过来前就左右都抢到了呢?有调度器在,就不能忽略这种可能。

@nullcc A 特别快,直接把两个锁都拿到了
1cming
2018 年 5 月 23 日
@geelaw
@ryd994
感谢二位,这个是我想要的答案。
zhangchioulin
2018 年 5 月 23 日
iOS 中 OSSpinLock 优先级反转也会死锁
USNaWen
2018 年 5 月 23 日
互斥
不可剥夺
请求和保持
循环等待
tangweihua163
2018 年 5 月 23 日
必然死锁,一个线程内才行,连续多次试锁同一资源?多个线程就不是必然
zhengxiaowai
2018 年 5 月 23 日
@1cming 一个很经典的案例:哲学家就餐问题
Finest
2018 年 5 月 23 日
线程 A:
l1.lock()
while(true)
l2.lock()

线程 B:
l2.lock()
while(true)
l1.lock()
KIDJourney
2018 年 5 月 23 日
l1 = lock()
l1.lock()
l1.lock()

这不就死锁了。
tempdban
2018 年 5 月 23 日
上了一课
ryd994
2018 年 5 月 24 日
@KIDJourney 你这个就叫不可重入锁重入
如果是重入锁,同一个线程锁两次是允许的
另外也可以设置如果重入则报错
jedihy
2018 年 5 月 24 日
对,这不是考 OS,这是靠分布式系统与算法
ebingtel
2018 年 5 月 24 日
@q397064399 对头 lz 描述的情况 只满足了一个
lerosua
2018 年 5 月 27 日
邮局寄个包裹给你, 要你身份证就能给你,但你的身份证就在包裹里~ 所以死锁了~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/457069

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX