linux kernel synchronization rcu

Read Copy Update /RCU

可以单个写,多个读,在内核中常用于更新链表。对比顺序锁,只能用指针访问资源,读数据无需加锁,避免多次读数据。
应用场景:

  • 多个读
  • 少量写
  • 写相较于读具有更高优先级
    rcu保持数据指针的引用,当资源发生变化时:
  1. 创建一份数据的拷贝
  2. 进行修改
  3. 所有reader结束后,指针更新
<linux/rcupdate.h>
rcu_read_lock()
rcu_read_lock()
synchronize_rcu()/call_rcu()
rcu_assign_pointer()
rcu_derefenrence()

kfree申请的动态内存

  1. 使用synchronize_rcu(),在函数后才可以安全kfree为了rcu_derefenrence为kmalloc的内存。
  2. 使用call_rcu(struct rcu_head* head, callback_func),在回调函数中kfree。

RCU reader的生命周期
当RCU reader进入临界区时,会调用rcu_read_lock();当退出临界区时,会调用rcu_read_unlock();

posted @ 2025-09-21 16:55  fangshuo  阅读(5)  评论(0)    收藏  举报