リード・コピー・アップデート
猶予期間が過ぎると、旧版のデータ構造を参照している参照者がいないと断定でき、旧版のデータを構成するアイテムを再利用フェーズで解放(再利用)しても安全である。
更新を削除と再利用のフェーズに分割することで、更新者は削除フェーズを速やかに行い、削除フェーズに入ったときに動作していた全ての参照者が停止するまで、言い換えれば猶予期間が過ぎるまで再利用フェーズを遅らせる。
典型的なRCUにおける更新は以下のような流れとなる。
RCUで保護されたデータ構造にアクセスする参照者は全てRCU参照側クリティカルセクション内で参照することを保証する。
データ構造へのポインタを削除して、その後の参照者がそれを参照できないようにする。
猶予期間が過ぎるのを待つ。それにより(前のフェーズで削除されたデータ構造へのポインタを持っている可能性のある)全ての参照者がRCU参照側クリティカルセクションを抜けるのを待つ。
この時点で更新したいデータ構造への参照を持つスレッドはいなくなるので、安全に再利用(たとえば、解放)できる。
このような手順において、更新者が削除と再利用のステップを実行するが、再利用については全く別のスレッドに任せた方が便利なことが多い。参照カウントを持たせることで、参照者が削除を行うこともできるので、更新ステップ(上記の (2))と再利用ステップ(上記の (4))が同じスレッドで行われるとしても、それらを分けて考えた方がわかりやすい。