# 什么是RCU ：API
Date: 2019-06-15


这篇文章     [RCU part 3: the RCU API](https://lwn.net/Articles/264090/#RCU%20has%20a%20Family%20of%20Wait-to-Finish%20APIs)

作者：

_**Paul E. McKenney,** IBM Linux Technology Center_

做为 “What is RCU”系列文章的最后一篇， 第三篇文章主要介绍了RCU API设计

# 基本操作

rcu\_read\_lock()

读者在读取由RCU保护的共享数据时使用该函数标记它进入读端临界区。

rcu\_read\_unlock()

该函数与rcu\_read\_lock配对使用，用以标记读者退出读端临界区。

synchronsize\_rcu()

该函数由RCU写端调用，它将阻塞写者，直到经过grace period后，即所有的读者已经完成读端临界区，写者才可以继续下一步操作。

call\_rcu()

写端调用不会阻塞

# 链表操作

list\_for\_each\_entry\_rcu（）

链表遍历

list\_add\_rcu()  
list\_add\_tail\_rcu()  
list\_del\_rcu()  
list\_replace\_rcu()  
list\_splice\_init\_rcu()

链表更新

作者对RCU判断是会在

the reader-writer-locking（读写锁）, reference-counting（引用技术）, and existence-guarantee constructs（存在保证结构）有更多的扩展。 

# 更新

文章中列的API后续又更新[到2010](https://lwn.net/Articles/418853/)，[2014](https://lwn.net/Articles/609904/)，[2019](https://lwn.net/Articles/777036/)版本。

# 实验

**[rcu\_example](https://github.com/jinb-park/rcu_example)** 是GitHub一个关于RCU调用的代码。 

# 参考

[Linux 2.6内核中新的锁机制–RCU](https://www.ibm.com/developerworks/cn/linux/l-rcu/index.html)

