两把锁都有人拿,谁也不肯先松手
死锁不会触发借用检查器,也不一定报错。程序只是安静地卡住。按最经典的四步走一遍,再把锁顺序统一,区别就会非常具体。
线路可继续调度
线程 A
数据库 → 日志
尚未拿锁
线程 B
日志 → 数据库
尚未拿锁
等待边会在这里形成:线程 → 想要的锁 → 当前持有者
🔒 数据库锁空闲
🔒 日志锁空闲
| 执行单元 | 已经持有 | 正在等待 |
|---|---|---|
| 线程 A | — | — |
| 线程 B | — | — |
死锁不会触发借用检查器,也不一定报错。程序只是安静地卡住。按最经典的四步走一遍,再把锁顺序统一,区别就会非常具体。
| 执行单元 | 已经持有 | 正在等待 |
|---|---|---|
| 线程 A | — | — |
| 线程 B | — | — |