RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制。顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据”。这是 Linux 内核实现的一种针对“读多写少”的共享数据的同步机制。
CU由三种基础机制构成,第一个机制用于插入,第二个用于删除,第三个用于让读者可以不受并发的插入和删除干扰。分别是:
发布/订阅机制,用于插入。
等待已有的RCU读者完成的机制,用于删除。
维护对象多个版本的机制,以允许并发的插入和删除操作。
类别 | 发布 | 删除 | 订阅 |
---|---|---|---|
指针 | rcu_assign_pointer | rcu_assign_pointer | rcu_dereference |
链表 | list_add_rcu list_add_tail_rcu list_replace_rcu | list_del_rcu | list_for_each_entry_rcu |
哈希链表 | hlist_add_head_rcu hlist_add_tail_rcu hlist_add_before_rcu hlist_add_behind_rcu hlist_replace_rcu | hlist_del_rcu | hlist_for_each_entry_rcu |