在开始时,我有一个CPU核心是写共享数据的作者,一个核心是读取共享数据的读者。
我需要读者写回一些数据以共享数据。
我知道rcu_read_lock()
/rcu_read_unlock()
用于读者获取共享数据。但是我不确定读者写回来共享数据会引起任何问题吗?
读者:
rcu_read_lock();
//get shared data
//modify the data
rcu_assign_pointer(ptr1, ptr2)
rcu_read_unlock();
此代码有效吗?
RCU的相当基本的属性是,多个作家之间的协调是通过另一种机制来处理的,例如传统锁。RCU将确保读者看到数据的一致视图,并且在完成之前,他们没有使用释放的指针,但是它不会同时从不同线程中进行多个更新。
。rcu确实保证可以从读者升级到作家状态。这可以通过在实现旋转锁定需要更新时获得旋转锁来完成。在调用Synchronize_rcu之前,必须退出RCU_READ_LOCK/RCU_READ_READ_READ块,但是Call_rcu可能会在块内排队回调。
不允许在rcu_read_lock/rcu_read_unlock块中阻塞,因此使用blocking sutexes在此内部管理作者相互排除将无效。
请参阅kernel.org rcu read-write升级