说到并发控制,第一反应是锁——互斥锁、自旋锁、读写锁。但 Linux 内核里有个数据结构叫 struct rcu_head,对应一套完全不同的思路:RCU,Read-Copy-Update。核心想法很简单——读者啥锁都不拿,直接读;写者不原地改数据,而是拷贝一份修改后,等所有旧读者走完,再把指针切过去。
听起来像是 Copy-on-Write,但关键区别在"等旧读者走完"这一步怎么判断。内核不会跟踪每个读者的进出(那等于又加了锁),而是引入了宽限期(grace period)的概念:一个 CPU 如果经历过了一次上下文切换或者一次 idle,就说明它已经离开了临界区——这叫静默状态(quiescent state)。当所有 CPU 都至少走过一次静默状态,宽限期结束,写者回调执行,把旧数据释放掉。