C-可以在rcu_read_lock()和rcu_read_unlock()之间使用rcu_assign_pointer



在开始时,我有一个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升级

相关内容

  • 没有找到相关文章

最新更新