一、RCU机制
1、RCU原理
2、链表操作
3、RCU层次架构
二、优化内存屏障
1、优化屏障
2、内存屏障
从链表删除链表元素entry。
将链表元素old换为new
----------------------------------------------------------------------------------------------------------------------------
对于writer,RCU操作包含:
1、rcu_assign_pointer: 该函数被用来进行removal的操作,在writer完成新版数据分配和更新之后,调用这个函数可以记RCU protected pointer 指向 protected data。
2、synchronize_rcu: writer 端操作可以是同步的,也就是说,完成更新操作之后,可以调用这个函数等待所有旧版本数据上的reader线程离开临界区,一旦从函数返回,说明旧的共享数据没有任何的引用,直接进行recla mationdd的操作。
3、call_rcu: writer无法阻塞,这时候可以调用call_rcu接口函数,该函数是注册callback直接返回,在适当机会调用callback函数,完成recla mation的操作。
removal:write分配一个new version 共享数据进行数据更新,更新完之后将rcu protected pointer 指向新版本数据,一旦把RCU protected pointer 指向的新的数据,也就意味着将推向前台。通过这样的操作,原来reader0,reader1对共享数据的引用被删除,它们都在旧版本的rcu protected data上进行数据访问。
reclamation: 共享数据不能有两个版本,因此一定要在适当的时机回收旧版的数据。
----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------