全局锁顺序

死锁 (Deadlock)

当由于多个锁的获取顺序不一致导致循环等待。

  • Process A: Hold Lock 1, Wait Lock 2
  • Process B: Hold Lock 2, Wait Lock 1

解决方案

Global Lock Ordering (全局锁顺序规则)。

  • 规则: 系统中所有的锁,必须按照严格定义的顺序获取。
  • 例子: 必须先拿 fs_lock 才能拿 inode_lock。如果你已经拿了 inode_lock,绝对不许回头去拿 fs_lock
  • 代价: 这对程序员的心智负担极大,需要严格的文档规范。