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

2018-05-23 10:42:29 +08:00
 1cming

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

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

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

线程 B:
l2.lock()
while(true)
l1.lock()
KIDJourney
2018-05-23 22:40:37 +08:00
l1 = lock()
l1.lock()
l1.lock()

这不就死锁了。
tempdban
2018-05-23 22:55:46 +08:00
上了一课
ryd994
2018-05-24 02:52:09 +08:00
@KIDJourney 你这个就叫不可重入锁重入
如果是重入锁,同一个线程锁两次是允许的
另外也可以设置如果重入则报错
jedihy
2018-05-24 03:06:36 +08:00
对,这不是考 OS,这是靠分布式系统与算法
ebingtel
2018-05-24 09:11:27 +08:00
@q397064399 对头 lz 描述的情况 只满足了一个
lerosua
2018-05-27 13:23:16 +08:00
邮局寄个包裹给你, 要你身份证就能给你,但你的身份证就在包裹里~ 所以死锁了~

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

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

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

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

© 2021 V2EX