知识卡片
有序锁破循环
内容
给锁对象分配全局唯一顺序,并要求所有线程按同一顺序加锁,可以破坏死锁的循环等待条件。发散:有序锁比全局锁更并发,但需要稳定、唯一、可比较的锁身份。
参考来源
- 位置:《你真的会写代码吗-2021》第8章《多个厨师一锅饭:线程安全》"8.2.2 有序的锁序列"(源文件:_epub-src/OEBPS/Text/0018.xhtml)
- 结论依据:原文明确"按照所有线程都知道的全局序列来对监视器进行排序,并确保所有线程都按照这个顺序来获取锁。可以通过给每个组分配唯一ID来创建这样一个全局序列",说明有序锁比全局锁更并发,但要求锁对象有稳定、唯一、可比较的身份。
- 原始内容:第二种避免死锁的方法更有效,那就是按照所有线程都知道的全局序列来对监视器进行排序,并确保所有线程都按照这个顺序来获取锁。可以通过给每个组分配唯一ID来创建这样一个全局序列……connectTo方法将按照两个监视器ID的顺序来获取它们,从而避免了死锁。