内核设计里有一个大挑战,就是同时达成优秀的并行性、并发情况下的正确性、代码的易理解性。直接使用锁当然可以实现正确性,但也没必要总是使用它。本章重点描述了xv6里的若干例子,它们有些使用了锁,有些使用了类似于锁的技术(但不是锁)。