锁定工程原理

主要观点:作者过去两年花太多时间看糟糕锁设计的代码并试图纠正,而少了实际构建 cool 东西。总结了锁工程的经验教训,包括原则、设计模式层次等,强调设计简单、正确、快速,保护数据结构而非代码,避免大的子系统锁等。
关键信息:

  • 花大量时间处理锁设计问题,将教训提炼成培训幻灯片,分两部分,第一部分阐述原则,第二部分构建锁工程设计模式层次。
  • 锁工程的优先级:使设计简单愚蠢,使其正确(为 lockdep 设计,教 lockdep 规则,遵循编码规则),使其快速(速度在理解设计前不重要,在崩溃前不重要,用户未注意时不重要)。
  • 保护数据结构而非代码的重要性:以代码为中心的锁设计易导致规则随对象生命周期变化,难以教给 lockdep,文档易过时,代码审查困难,易出现锁相关 bug 且难修复;大的子系统锁会导致后期调整锁设计困难,覆盖范围难确定,不同入口点锁顺序不同,代码维护困难。
    重要细节:
  • 最后一篇博客是关于 lockdep 滥用的 rant,lockdep 可自动化验证锁设计,不同驱动或子系统需教 lockdep 锁规则,以正确顺序获取关键锁,在入口点验证锁契约。
  • 不要发明自己的锁原语,使用内核的锁;使用特定的同步原语,因其有 lockdep 注释;选择最简单的锁,如普通互斥锁而非读写信号量。
  • 以数据结构为中心设计锁,可避免上述以代码为中心的锁设计问题,避免大的子系统锁。
  • 下周将涵盖这些原则在实践中的应用,即通过大量锁设计模式说明。
阅读 21
0 条评论