<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Spinlock</id>
	<title>Spinlock - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Spinlock"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Spinlock&amp;action=history"/>
	<updated>2026-05-28T19:46:31Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Spinlock&amp;diff=265328&amp;oldid=prev</id>
		<title>imported&gt;BrunoBoehmler: /* Einleitung */ Belege-Baustein eingefügt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Spinlock&amp;diff=265328&amp;oldid=prev"/>
		<updated>2026-04-20T20:56:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Einleitung: &lt;/span&gt; Belege-Baustein eingefügt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Belege fehlen}}&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Spinlock&amp;#039;&amp;#039;&amp;#039; (Spin-Lock) ist ein Mechanismus zur [[Prozesssynchronisation]]. Es ist eine Sperre ([[Lock]]) zum Schutz einer gemeinsam genutzten Ressource durch konkurrierende Prozesse bzw. Threads &amp;#039;&amp;#039;(siehe [[Kritischer Abschnitt]])&amp;#039;&amp;#039; nach dem Prinzip des wechselseitigen Ausschlusses ([[Mutex]]).&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
Die Sperre wird umgesetzt mittels [[Aktives Warten|aktiven Wartens]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // Eintrittsprotokoll&lt;br /&gt;
 solange (Sperrvariable besitzt Wert &amp;#039;gesperrt&amp;#039;) { //   \&lt;br /&gt;
    tue nichts;                                    //   | Achtung! Hier:&lt;br /&gt;
 }                                                 //   | Atomares Vergleichen und Setzen&lt;br /&gt;
 setze Sperrvariable auf &amp;#039;gesperrt&amp;#039;                //   /&lt;br /&gt;
&lt;br /&gt;
 // Kritischer Abschnitt&lt;br /&gt;
 modifiziere Ressource&lt;br /&gt;
&lt;br /&gt;
 // Austrittsprotokoll&lt;br /&gt;
 setze Sperrvariable auf &amp;#039;frei&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zu Anfang besitzt die Sperrvariable den Wert &amp;#039;&amp;#039;frei&amp;#039;&amp;#039;. Alle Prozesse durchlaufen für den Eintritt in einen kritischen Abschnitt das gleiche Protokoll: Wenn die Sperrvariable &amp;#039;&amp;#039;frei&amp;#039;&amp;#039; ist, setze sie auf &amp;#039;&amp;#039;gesperrt&amp;#039;&amp;#039;, ansonsten prüfe dies erneut (aktives Warten). Das Prüfen und Setzen erfolgt [[Atomare Operation|atomar]] und wird je nach Prozessorarchitektur unterschiedlich implementiert (siehe [[Fetch-and-add]], [[Compare-and-swap]] oder [[Test-and-set]]).&lt;br /&gt;
&lt;br /&gt;
Der Prozess, der die Sperrvariable auf &amp;#039;&amp;#039;gesperrt&amp;#039;&amp;#039; setzt, wird als „Besitzer“ der Sperrvariablen bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Vorteile ==&lt;br /&gt;
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 (Informatik)|Laufzeit]] schneller als alternative [[Mutex]]e. Dies erhöht die &amp;#039;&amp;#039;effektive Parallelität&amp;#039;&amp;#039; gegenüber threadwechselnden Synchronisationsmechanismen teilweise erheblich und ist daher bei stark nebenläufigen Algorithmen eine häufig anzutreffende Vorgehensweise (z.&amp;amp;nbsp;B. im [[Linux (Kernel)|Linux-Kernel]]&amp;lt;ref name=&amp;quot;linux_kernel_spinlocks&amp;quot;&amp;gt;{{cite web |url=https://www.kernel.org/doc/Documentation/locking/spinlocks.txt |title=Lesson 1: Spin locks |date=12. August 2013 |website=The Linux Kernel Archives |publisher=Page maintained by Rob Landley, rob at landley dot net |accessdate=2013-11-04}}&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Nachteile ==&lt;br /&gt;
Das aktive Warten benötigt [[Laufzeit (Informatik)|Laufzeit]]. Ein Spinlock kann die Programmausführung stark verlangsamen, wenn mehr Threads als Prozessorkerne vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
In Abhängigkeit vom Schedulingverfahren kann der Einsatz von Spinlocks auch zu [[Deadlock (Informatik)|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 &amp;#039;&amp;#039;ablaufend&amp;#039;&amp;#039; bleibt) und dadurch andere &amp;#039;&amp;#039;ablaufbereite&amp;#039;&amp;#039; Threads behindert. Folgendes Beispiel verdeutlicht das Problem: In einem Einprozessorsystem mit zwei Threads wird ein Spinlock von einem Thread&amp;amp;nbsp;L mit &amp;#039;&amp;#039;geringer&amp;#039;&amp;#039; Priorität erfolgreich gesperrt. Kurz darauf (und vor der Freigabe des Spinlocks durch Thread&amp;amp;nbsp;L) wird ein Thread&amp;amp;nbsp;H mit &amp;#039;&amp;#039;hoher&amp;#039;&amp;#039; Priorität durch ein Ereignis lauffähig und vom [[Prozess-Scheduler|Scheduler]] aktiviert. Thread&amp;amp;nbsp;H versucht nun ebenfalls, den Spinlock zu sperren, und gerät dadurch in das aktive Warten. Bei einem Schedulingverfahren ohne [[Zeitscheibenverfahren|Time Slicing]] entsteht dadurch ein Deadlock, da Thread&amp;amp;nbsp;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.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur |Autor=Sándor Juhász, Ákos Dudás, Tamás Schrádi |Titel=Cost of mutual exclusion with spin locks on multi-core CPUs |Sammelwerk=Proceedings of the 5th WSEAS congress on Applied Computing conference, and Proceedings of the 1st international conference on Biologically Inspired Computation |Reihe=BICA’12 |Verlag=World Scientific and Engineering Academy and Society (WSEAS) |Ort=Stevens Point WI |Datum=2012 |ISBN=978-1-61804-089-3 |Seiten=15–19 |Kommentar=Conference Paper |Online=https://dl.acm.org/doi/10.5555/2230596.2230600}}&lt;br /&gt;
* {{Literatur |Autor=Mordechai Ben-Ari |Titel=Principles of Concurrent and Distributed Programming: Algorithms and Models |Reihe=Prentice-Hall International Series in Computer Science |Auflage=2 |Verlag=Addison-Wesley |Datum=2005 |ISBN=978-0-321-31283-9}}&lt;br /&gt;
* {{Literatur |Autor=James H. Anderson, Yong-Jik Kim, Ted Herman |Titel=Shared-memory mutual exclusion: major research trends since 1986 |Sammelwerk=Distrib. Comput. |Band=16 |Nummer=2–3 |Verlag=Springer-Verlag |Ort=London UK |Datum=2003-09 |ISSN=0178-2770 |Seiten=75–110 |DOI=10.1007/s00446-003-0088-6}}&lt;br /&gt;
* {{Literatur |Autor=M. Raynal, D. Beeson |Titel=Algorithms for mutual exclusion |Verlag=MIT Press |Ort=Cambridge MA |Datum=1986 |ISBN=0-262-18119-3}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Parallelverarbeitung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;BrunoBoehmler</name></author>
	</entry>
</feed>