一.什么是RCU机制
-
RCU是Linux中比较重要的一种同步机制.顾名思义就是 " 读,拷贝更新 " ,该机制记录了指向共享数据结构的指针的所有使用者,在该结构将要改变的时候,首先创建一个副本,在副本中修改.在所有进行读访问的使用者结束对旧副本的读取之后,指针可以替换指向新的,修改后的副本的指针,这种机制可以允许
并发读写
-
但是如果存在多个写者时,在写者把更新后的副本覆盖到原来数据之中,写者与写者需要利用其他同步机制来保证同步
-
RCU在使用的时候一般是用于读者多而写者少的情况,RCU在读者和读者之间不需要任何的系统开销,但是在写者和写者之间必须保持同步,而且写者必须要等它之间的读者全部都退出之后才能修改之前的资源
-
RCU实现的前提是
读者在访问被RCU保护的共享数据
期间是不能够被阻塞的,这是RCU机制得以实现的一个基本前提,也就是说在读者在引用被RCU保护的共享数据期间,读者所在的CPU是不能发生上下文切换的 -
RCU保护的资源必须通过指针访问
二.RCU核心API
如果指针ptr指向被RCU保护的数据结构,直接反引用指针是被禁止的,首先必须调用rcu_dereference(ptr),然后反引用返回的结果,需要使用rcu_read_lock
和rcu_read_unlo