Leser-Schreiber-Sperre

Niels Delbrück Juli 26, 2016 L 4 0
FONT SIZE:
fontsize_dec
fontsize_inc

In der Informatik ist ein Leser-Schriftsteller oder Shared-exklusive Sperre ein Synchronisations primitive, die einer der Leser-Schriftsteller Probleme löst. Ein Leser-Schreiber-Sperre ist wie ein Mutex, indem sie steuert den Zugriff auf eine gemeinsam genutzte Ressource, so dass gleichzeitigen Zugriff auf mehrere Threads zum Lesen, aber den Zugang zu einem einzigen Thread für Schreibvorgänge auf die Ressource. Eine übliche Anwendung könnte sein, den Zugriff auf eine Datenstruktur im Speicher, die nicht atomar aktualisiert werden kann, und ist erst gültig, wenn die Aktualisierung abgeschlossen ist zu kontrollieren. Leser-Schreiber-Sperren werden in der Regel auf der Oberseite der Mutexe und Bedingungsvariablen, oder auf Semaphore aufgebaut.

Ein mögliches Problem mit einem herkömmlichen RW Sperre ist, dass sie führen zu Hunger zu schreiben, wenn Behauptung hoch genug ist, was bedeutet, dass, solange wenigstens eine Lesefaden hält die Sperre, wird kein Writer-Thread in der Lage sein, sie zu erwerben. Da mehrere Leser Themen kann die Sperre auf einmal zu halten, bedeutet dies, dass ein Schriftsteller Faden kann weiterhin die Sperre wartet, während neuen Leser Themen sind in der Lage, um die Sperre bis zu dem Punkt, wo der Schriftsteller kann auch nach all der Leser warten zu erwerben, dem die Sperre halten wurden, als es zuerst versucht, erwerben sie die Sperre freigegeben haben. Um Schriftsteller Hunger zu vermeiden, kann eine Variante auf einem Leser-Schreiber-Sperre aufgebaut werden, die alle für neue Leser vom Erwerb des Schlosses, wenn es einen Schriftsteller verhindert Warteschlange eingereiht und warten auf die Sperre, so dass der Schriftsteller die Sperre zu bekommen, sobald die Leser die schon hielten die Sperre werden damit fertig. Der Nachteil ist, dass es weniger performant, da jede Operation, die Entnahme oder Lösen der Verriegelung entweder lesen oder schreiben, ist komplexer, wobei intern benötigt und stattdessen die Freigabe zwei Mutexe von einem. Diese Variante wird manchmal bekannt als "Schreiben-bevorzugende" oder "zu schreiben vorgespannt" Leser-Schreiber-Sperre.

Der Lese-Kopie-update-Algorithmus ist eine Lösung für das Leser-Schriftsteller Problem. RCU ist warten frei für die Leser. Der Linux-Kernel implementiert eine spezielle Lösung für wenige Schriftsteller namens seqlock.

Ein Lese- / Schreibsperrmuster oder einfach RWL ist ein Entwurfsmuster, die gleichzeitigen Lesezugriff auf ein Objekt ermöglicht, erfordert aber einen exklusiven Zugang für Schreiboperationen. In diesem Muster können mehrere Leser die Daten parallel lesen, aber eine exklusive Sperre erforderlich ist, während das Schreiben der Daten. Wenn ein Schriftsteller ist das Schreiben der Daten werden die Leser blockiert, bis der Schriftsteller schreibt beendet.

Implementierungen

  • Der POSIX-Standard und damit zusammenhängenden Vorgängen.
  • Die C-Sprache Win32 Mehrleser / Single-Schreiber-Sperre in Hamilton C-Shell verwendet. Die Hamilton Schloss vermutet Behauptung ist niedrig genug, dass Schriftsteller sind unwahrscheinlich, ausgehungert werden, woraufhin Jordan Zimmerman, um eine modifizierte Version, um nicht zu verhungern vorschlagen.
  • Die ReadWriteLock-Schnittstelle und die ReentrantReadWriteLock Sperren in Java-Version 5 oder höher.
  • Die Microsoft-Sperre für C # und other.NET Sprachen.
  • Die Lese / Schreib-Sperre in der Boost C ++ Bibliotheken.
  • Ein Pseudo-Code-Implementierung in der Readers-Writers Problem Artikels.
  • Die Phase fairen Reader-Writer-Sperre durch Brandenburg und Anderson, die zwischen Leser und Schreiber wechselt.
  Like 0   Dislike 0
Bemerkungen (0)
Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha