黑马程序员技术交流社区

标题: 请问死锁为什么形容是抢筷子吃肉呢?哪位大牛可以解释- - [打印本页]

作者: L1ub0w3n    时间: 2016-6-19 23:05
标题: 请问死锁为什么形容是抢筷子吃肉呢?哪位大牛可以解释- -
对于这个抢筷子吃肉不是很理解。
有没有大牛给解释一下。
作者: dubei1993    时间: 2016-6-20 00:04
死锁的原因是同步嵌套,也就是说至少有两把锁。但是,如果run方法只有这两把锁,会直接走到底,还是不会死锁。现在有两把锁ab,if先走a再走b。else先走b再走a。定义两个线程分别走if,else。结果锁很有可能锁在一起了。但也不是一定会锁一起,因为线程的运行靠抢的
作者: 彼岸轮回    时间: 2016-6-20 00:18
  1. <blockquote>class Test implements Runnable
复制代码

额,我理解的是:肉就是线程要操作的资源,线程就是人,筷子就是线程锁(一根筷子代表一个);筷子只有一双肉只有一块,而人有多个,人要吃肉就必须要一双筷子,当两个线程锁交叉锁住同意资源时(上面代码所展示的),假设当t1线程运行true拿到a锁要进b锁的时候t2线程拿到b锁要进a锁;由于此时t1,t2都拿到了其中不同的锁想要进另一个;就会产生死锁,线程就无法继续执行(因为拿不到相应的锁),就会导致程序停在那;就好比那个人都想拿到那双筷子去吃那块肉,而一人只有一只,又不想给对方.
以上就是我的理解,希望能帮到楼主.

作者: Ake丶    时间: 2016-6-21 21:45
2个熊孩子同一个时间抢电脑玩,一个人拿到鼠标,一个人拿到键盘。结果谁都玩不了。
假如有个家长(同步机制)来管理,每个小孩玩5分钟,那么每个小孩都能玩到电脑。
作者: Ake丶    时间: 2016-6-21 21:46
Ake丶 发表于 2016-6-21 21:45
2个熊孩子同一个时间抢电脑玩,一个人拿到鼠标,一个人拿到键盘。结果谁都玩不了。
假如有个家长(同步机制 ...

要深入理解,可以去拿本操作系统看看
作者: Ake丶    时间: 2016-6-21 21:47
Ake丶 发表于 2016-6-21 21:45
2个熊孩子同一个时间抢电脑玩,一个人拿到鼠标,一个人拿到键盘。结果谁都玩不了。
假如有个家长(同步机制 ...

要深入理解,可以去拿本操作系统看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2