<?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=Compare-and-swap</id>
	<title>Compare-and-swap - 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=Compare-and-swap"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Compare-and-swap&amp;action=history"/>
	<updated>2026-06-27T06:47:28Z</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=Compare-and-swap&amp;diff=1321114&amp;oldid=prev</id>
		<title>imported&gt;Ulanwp: Fehlenden Sprachparameter eingefügt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Compare-and-swap&amp;diff=1321114&amp;oldid=prev"/>
		<updated>2026-02-20T10:55:02Z</updated>

		<summary type="html">&lt;p&gt;Fehlenden Sprachparameter eingefügt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Compare-and-Swap&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;CAS&amp;#039;&amp;#039;&amp;#039;, {{enS}} für &amp;#039;&amp;#039;Vergleichen und Tauschen&amp;#039;&amp;#039;) ist eine [[atomare Operation]] in der [[Informatik]], um [[Lock|Locking-]] und [[Synchronisation]]soperationen zu implementieren. Eine Speicherstelle wird mit einem vorgegebenen Wert verglichen, und bei Übereinstimmung mit einem neuen Wert überschrieben. Am Rückgabewert muss abzulesen sein, ob der Tausch ausgeführt wurde.&lt;br /&gt;
&lt;br /&gt;
Die CAS-Instruktion ist eine [[atomare Operation]] der [[Prozessor|CPU]], d.&amp;amp;nbsp;h. ihr Ablauf kann und darf von keiner anderen Operation unterbrochen werden. Auf Intel-[[X86-Prozessor|x86]]- und -[[Itanium]]-Prozessoren ist dies die CMPXCHG-Instruktion.&lt;br /&gt;
&lt;br /&gt;
Andere atomare CPU-Instruktionen, die in ähnlicher Weise verwendet werden können, sind z.&amp;amp;nbsp;B. [[test-and-set]] und [[fetch-and-add]]. Auf [[Reduced Instruction Set Computer|RISC]]-Architekturen ist diese Operation meist als [[Load-Link/Store-Conditional]] (LL/SC) implementiert, da die RISC-Philosophie kombinierte [[RMW-Befehl|read-modify-write Befehle]] nicht erlaubt. LL/SC hat auch eine etwas enger gefasste Semantik, da es auch nicht-verändernde Zugriffe auf die referenzierte Speicherstelle erkennen kann.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
CAS wird zur Implementierung von [[Lock]]ingobjekten, wie [[Semaphor (Informatik)|Semaphoren]] und [[Mutex]]en, und von nebenläufigen Datenstrukturenobjekten verwendet.&lt;br /&gt;
&lt;br /&gt;
Ein simples Mutex-Schema (gegenseitiger Ausschluss) lässt sich per CAS über eine einfache Speicherstelle realisieren, die von mehreren [[Prozess (Informatik)|Prozessen]] bzw. [[Thread (Informatik)|Threads]] gemeinsam verwendet wird. Möchte ein Thread in einen [[Kritischer Abschnitt|kritischen Abschnitt]] eintreten, versucht er per CAS atomar eine 0 (Mutex ungesperrt) durch eine 1 zu ersetzen. War das CAS erfolgreich, konnte also eine 1 in die Speicherstelle geschrieben werden, hat der Thread exklusiven Zugriff auf die geschützten Betriebsmittel. Alle anderen CAS-Operationen auf der Speicherstelle schlagen fehl, so dass die jeweiligen Threads [[Aktives Warten|aktiv warten]] oder die Kontrolle an die Prozessverwaltung des [[Betriebssystem]]s abgeben müssen. Ein solches schnelles Mutex-Schema, in dem die Mitwirkung des Betriebssystems auf ein Minimum reduziert wird, ist z.&amp;amp;nbsp;B. als [[Futex]] &amp;#039;&amp;#039;(fast userspace mutex)&amp;#039;&amp;#039; im [[Linux]]-Betriebssystem implementiert.&lt;br /&gt;
&lt;br /&gt;
Nebenläufige Datenstrukturobjekte können z.&amp;amp;nbsp;B. mit dem [[Read-copy-update]]-Schema implementiert werden. Dabei ist der Lesezugriff immer erlaubt; Schreibzugriffe werden zunächst auf einer Teilkopie der Datenstruktur ausgeführt, die dann atomar wieder in die ursprüngliche Struktur eingehängt wird.&lt;br /&gt;
&lt;br /&gt;
In einem klassischen Aufsatz zeigte [[Maurice Herlihy]] 1991, dass CAS-Instruktionen zu einer Klasse von Synchronisationsobjekten gehören, die die Implementierung wartezeit-freier, nebenläufiger Datenstrukturobjekte &amp;#039;&amp;#039;(wait-free concurrent data object)&amp;#039;&amp;#039; für eine unbeschränkte Anzahl von nebenläufigen Prozessen erlaubt.&amp;lt;ref&amp;gt;{{cite journal |first=Maurice |last=Herlihy |title=Wait-free synchronization |journal=ACM Trans. Program. Lang. Syst. |volume=13 |issue=1 |pages=124–149 |date=1991-01 |url=https://cs.brown.edu/~mph/Herlihy91/p124-herlihy.pdf |access-date=2007-05-20 |language=en}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
Da der ununterbrochene Ablauf der Operation garantiert sein muss, muss die CAS-Instruktion auf Hardware-Ebene implementiert sein. Der folgende Pseudocode ist eine Veranschaulichung.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;&amp;lt; atomare Operation &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;function&amp;#039;&amp;#039;&amp;#039; CompareAndSwap(speicherstelle, alt, neu) {&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039; *speicherstelle == alt &amp;#039;&amp;#039;&amp;#039;then&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
         *speicherstelle := neu&lt;br /&gt;
         &amp;#039;&amp;#039;&amp;#039;return&amp;#039;&amp;#039;&amp;#039; true&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;else&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
         &amp;#039;&amp;#039;&amp;#039;return&amp;#039;&amp;#039;&amp;#039; false&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da Speicher manipuliert wird, muss in speichergekoppelten [[Mehrprozessorsystem]]en ([[Symmetrisches Multiprozessorsystem|SMP]]) ein Verfahren implementiert sein, das die Kohärenz des Speichers und der einzelnen CPU [[Cache]]s über Prozessorgrenzen hinweg gewährleistet (siehe [[Cache-Kohärenz]]).&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Prozesssynchronisation]]&lt;br /&gt;
* [[Paralleler Algorithmus]]&lt;br /&gt;
* [[Nichtsequentielle Programmierung]]&lt;br /&gt;
* [[Parallele Programmierung]]&lt;br /&gt;
* [[Multithreading]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Betriebssystemtheorie]]&lt;br /&gt;
[[Kategorie:Parallelverarbeitung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Ulanwp</name></author>
	</entry>
</feed>