RCU (Read-Copy-Update, deutsch etwa „Lesen-Kopieren-Aktualisieren“) ist ein Synchronisationsmechanismus des Linux-Kernels, bei dem Leser völlig ohne Sperre auskommen. Entwickelt wurde das Konzept in den 1990er-Jahren von Paul E. McKenney (zunächst im System DYNIX/ptx) und 2002 in den Linux-Kernel aufgenommen.

Das Grundprinzip

Der Name beschreibt den Ablauf eines Updates in drei Schritten:

  1. Read: Der Schreiber erstellt eine Kopie der zu ändernden Datenstruktur.
  2. Copy-Update: Er ändert die Kopie und veröffentlicht sie durch einen atomaren Zeigertausch (atomare Operation). Leser, die ab jetzt zugreifen, sehen die neue Version.
  3. Reclaim: Die alte Version wird erst freigegeben, wenn garantiert kein Leser mehr auf sie zugreift — nach der sogenannten Grace Period.

Leser umschließen ihre Zugriffe mit rcu_read_lock() und rcu_read_unlock() — in aktuellen Kerneln kostet das praktisch nichts und blockiert niemanden. Der Schreiber wartet mit synchronize_rcu(), bis alle Prozessoren einen sogenannten Quiescent State (Ruhezustand, z. B. Kontextwechsel) erreicht haben; erst dann ist sicher, dass keine alte Version mehr referenziert wird.

Wozu RCU verwendet wird

RCU steckt im Kernel an vielen Stellen: bei Routing-Tabellen im Netzwerkbereich, im Dentry-Cache des Dateisystems und in unzähligen wartungsarmen Listen. Gerade auf Mehrkern-Prozessoren skaliert RCU hervorragend, weil Leser nie auf andere CPUs warten müssen.

Abgrenzung zu Seqlock und Sperren

Ein Seqlock lässt Leser ebenfalls ohne Sperre laufen, verlangt aber Wiederholungen, wenn ein Schreiber dazwischenfunkt. RCU verlangt keine Wiederholung — Leser sehen immer eine konsistente Version. Klassische Spinlocks und Lese-Schreib-Sperren blockieren Leser dagegen aktiv. Der Preis von RCU: Updates sind aufwendiger (Kopie + Grace Period), und die Hardware muss Cache-Kohärenz korrekt umsetzen. RCU ist damit ein zentraler Baustein der Nebenläufigkeit im modernen Linux.