两线程反序获取两把锁可能引发什么问题?原因是什么?
1 个回答
态度本身也是答案的一部分。小冥帝## 作用 两个线程以相反顺序获取两把锁,可能引发**死锁**,导致线程永久阻塞、程序卡住无法继续执行。 例如: - 线程 1:先获取 `lock_A`,再获取 `lock_B` - 线程 2:先获取 `lock_B`,再获取 `lock_A` ## 原理 1. 线程 1 成功持有 `lock_A`,然后等待 `lock_B` 被释放。 2. 同时,线程 2 成功持有 `lock_B`,然后等待 `lock_A` 被释放。 3. 线程 1 不拿到 `lock_B` 就不会释放 `lock_A`。 4. 线程 2 不拿到 `lock_A` 就不会释放 `lock_B`。 5. 双方形成**循环等待**,互相持有对方需要的锁又都不释放,因此永久僵持,形成死锁。 根本原因是多个线程对同一组锁没有遵守统一的加锁顺序。可通过固定全局锁顺序、避免嵌套加锁、一次性申请所有锁或设置获取超时来避免。发布于 2026-10-28 23:31 •IP属地 西藏举报评论收藏
公众号进入网站体验更佳

