2017-04-20 132 views
1

我有一個關於RCU鎖的問題。可以在RCU鎖中讀取舊版本或新版本嗎?

據我所知,RCU允許一些讀者(在寬限期之前開始並在寬限期結束)具有舊版本或新版本。

查找附加圖像。

enter image description here

以便讀者的是黃色部分之前開始,並且黃色部分內端可以讀取更新(刪除)值或舊值。

但是,我的問題是爲什麼讀者可以有不確定的價值? 我認爲所有的讀者都應該有確定的價值,這意味着它不應該是舊的價值或新的價值。

我錯過了什麼嗎?

謝謝。

回答

0

這就是RCU的工作原理,這是RCU和鎖之間的主要區別。

例如,使用RW鎖,您可以確保在更新過程中每個閱讀器都會停止並等待更新完成。然後所有讀者立即看到更新的數據。

RCU by design允許您在更新之前或之後查看數據,但對於許多使用情況而言,它是可以的。 RCU的主要優點是讀者永遠不會被封鎖,並且作家永遠不會被封鎖。

當然,如果你的程序的邏輯需要工作線程之間嚴格的數據一致性--RCU不是最好的選擇。看看RW Locks然後...

相關問題