2017-10-01 10 views
0

開始的時候,我有一個cpu核心作爲寫入共享數據的寫入器和一個讀取器讀取共享數據的核心。
但是現在,我需要讀者寫回一些數據來共享數據。
我知道rcu_read_lock和rcu_read_unlock用於讀取器獲取共享數據。但我不確定讀者寫回共享數據會導致任何問題?可以在rcu_read_lock和rcu_read_unlock之間使用rcu_assign_pointer嗎?

In reader: 

rcu_read_lock(); 
    get share data 
    modify the data 

    rcu_assign_pointer("the share data will be write back") 
rcu_read_unlock(); 

此代碼是否可用?

回答

0

RCU的一個基本特性是多個寫入者之間的協調通過另一種機制來處理,例如,傳統的鎖。 RCU將保證讀者看到數據的一致視圖,並且他們正在使用的指針在完成之前得到釋放,但它不會對來自不同線程的多個更新同時進行排序。

RCU確保可以從讀取器升級到寫入器狀態。這可以通過在需要更新時獲取旋轉鎖來完成。在調用synchronize_rcu之前,必須先退出rcu_read_lock/rcu_read_unlock塊,但call_rcu可能會在塊內部回調一個回調。

一個不允許在rcu_read_lock/rcu_read_unlock塊內部進行阻塞,因此管理這種使用阻塞互斥體的作者互斥體將不起作用。

請參閱kernel.org RCU read-to-write upgrade

相關問題