Spinlock
Vorlage:Hinweisbaustein Ein Spinlock (Spin-Lock) ist ein Mechanismus zur Prozesssynchronisation. Es ist eine Sperre (Lock) zum Schutz einer gemeinsam genutzten Ressource durch konkurrierende Prozesse bzw. Threads (siehe Kritischer Abschnitt) nach dem Prinzip des wechselseitigen Ausschlusses (Mutex).
Implementierung[Bearbeiten]
Die Sperre wird umgesetzt mittels aktiven Wartens:
// Eintrittsprotokoll
solange (Sperrvariable besitzt Wert 'gesperrt') { // \
tue nichts; // | Achtung! Hier:
} // | Atomares Vergleichen und Setzen
setze Sperrvariable auf 'gesperrt' // /
// Kritischer Abschnitt
modifiziere Ressource
// Austrittsprotokoll
setze Sperrvariable auf 'frei'
Zu Anfang besitzt die Sperrvariable den Wert frei. Alle Prozesse durchlaufen für den Eintritt in einen kritischen Abschnitt das gleiche Protokoll: Wenn die Sperrvariable frei ist, setze sie auf gesperrt, ansonsten prüfe dies erneut (aktives Warten). Das Prüfen und Setzen erfolgt atomar und wird je nach Prozessorarchitektur unterschiedlich implementiert (siehe Fetch-and-add, Compare-and-swap oder Test-and-set).
Der Prozess, der die Sperrvariable auf gesperrt setzt, wird als „Besitzer“ der Sperrvariablen bezeichnet.
Vorteile[Bearbeiten]
Das Verfahren vermeidet Kontextwechsel, die sehr zeitaufwändig sind. Wenn das Warten auf die Freigabe einer Sperre im Mittel kürzer als ein Kontextwechsel ist, dann sind Spinlocks trotz ihrer zusätzlichen Laufzeit schneller als alternative Mutexe. Dies erhöht die effektive Parallelität gegenüber threadwechselnden Synchronisationsmechanismen teilweise erheblich und ist daher bei stark nebenläufigen Algorithmen eine häufig anzutreffende Vorgehensweise (z. B. im Linux-Kernel<ref name="linux_kernel_spinlocks">Vorlage:Cite book/Name: [Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden.] In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Page maintained by Rob Landley, rob at landley dot net, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden., archiviert vom Vorlage:Referrer (nicht mehr online verfügbar) am Vorlage:Cite book/URL.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>).
Nachteile[Bearbeiten]
Das aktive Warten benötigt Laufzeit. Ein Spinlock kann die Programmausführung stark verlangsamen, wenn mehr Threads als Prozessorkerne vorhanden sind.
In Abhängigkeit vom Schedulingverfahren kann der Einsatz von Spinlocks auch zu Deadlocks führen. Dies resultiert aus dem Umstand, dass durch einen Spinlock der aktive Thread nicht suspendiert wird, sondern aktiv auf die Sperrvariable wartet (also ablaufend bleibt) und dadurch andere ablaufbereite Threads behindert. Folgendes Beispiel verdeutlicht das Problem: In einem Einprozessorsystem mit zwei Threads wird ein Spinlock von einem Thread L mit geringer Priorität erfolgreich gesperrt. Kurz darauf (und vor der Freigabe des Spinlocks durch Thread L) wird ein Thread H mit hoher Priorität durch ein Ereignis lauffähig und vom Scheduler aktiviert. Thread H versucht nun ebenfalls, den Spinlock zu sperren, und gerät dadurch in das aktive Warten. Bei einem Schedulingverfahren ohne Time Slicing entsteht dadurch ein Deadlock, da Thread L nicht wieder lauffähig wird und den Spinlock nicht mehr freigeben kann. Die Verwendung eines Synchronisationsmechanismus mit Threadwechsel hätte in diesem Beispiel den Deadlock verhindert.
Literatur[Bearbeiten]
- Skriptfehler: Ein solches Modul „Vorlage:Literatur“ ist nicht vorhanden.
- Skriptfehler: Ein solches Modul „Vorlage:Literatur“ ist nicht vorhanden.
- Skriptfehler: Ein solches Modul „Vorlage:Literatur“ ist nicht vorhanden.
- Skriptfehler: Ein solches Modul „Vorlage:Literatur“ ist nicht vorhanden.
Einzelnachweise[Bearbeiten]
<references />