<?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=Wettlaufsituation</id>
	<title>Wettlaufsituation - 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=Wettlaufsituation"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Wettlaufsituation&amp;action=history"/>
	<updated>2026-06-11T18:19:27Z</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=Wettlaufsituation&amp;diff=79046&amp;oldid=prev</id>
		<title>~2026-18575-11: /* Beispiel */ Kommafehler, Satzbau</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Wettlaufsituation&amp;diff=79046&amp;oldid=prev"/>
		<updated>2026-03-25T11:43:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Beispiel: &lt;/span&gt; Kommafehler, Satzbau&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Weiterleitungshinweis|Race Condition|Zur Verwendung in der Elektronik siehe [[Glitch (Elektronik)]].}}&lt;br /&gt;
&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;Wettlaufsituation&amp;#039;&amp;#039;&amp;#039;,&amp;lt;ref&amp;gt;Simon Hoffmann, Rainer Lienhart: &amp;#039;&amp;#039;OpenMP. Eine Einführung in die parallele Programmierung mit C/C++.&amp;#039;&amp;#039; Online-Ausgabe des korrigierten Nachdrucks. Springer-Verlag, Berlin und Heidelberg 2009, S. 92 ([https://link.springer.com/book/10.1007/978-3-540-73123-8 Download über SpringerLink]).&amp;lt;/ref&amp;gt; aus dem [[Englische Sprache|Englischen]] auch &amp;#039;&amp;#039;&amp;#039;Race Condition&amp;#039;&amp;#039;&amp;#039; ({{deS|&amp;#039;&amp;#039;Wettlauf-Bedingung&amp;#039;&amp;#039;}}) oder &amp;#039;&amp;#039;&amp;#039;Race Hazard&amp;#039;&amp;#039;&amp;#039; ({{deS|&amp;#039;&amp;#039;Wettlauf-Risiko&amp;#039;&amp;#039;}}), mitunter auch „kritische Wettlaufsituation“, bezeichnet in der [[Programmierung]] eine Konstellation, in der das Ergebnis einer Operation vom zeitlichen Verhalten bestimmter Einzeloperationen oder der Umgebung abhängt. Der Begriff stammt von der Vorstellung, dass zwei Signale wettlaufen, um die Ausgabe als erstes zu beeinflussen. Im Allgemeinen ist die Möglichkeit zu vermeiden, dass eine Race Condition entsteht.&lt;br /&gt;
&lt;br /&gt;
Unbeabsichtigte Wettlaufsituationen sind ein häufiger Grund für schwer auffindbare [[Nichtdeterminismus|nichtdeterministische]] [[Programmfehler]]. Bezeichnend für solche Situationen ist, dass bereits die veränderten Bedingungen zum Programmtest, wie zusätzliches [[Logging]] oder [[Debugger|Debug]]-Modus, zu einem völligen Verschwinden der Symptome führen können – siehe hierzu auch [[Heisenbug]]. Zur Vermeidung solcher Konstellationen können bei der Programmerstellung beispielsweise [[Semaphor (Informatik)|Semaphore]] eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Zwei gleichzeitig laufende Systeme wollen denselben Wert erhöhen. Die notwendigen Einzelschritte, die jedes der beiden Systeme durchlaufen muss, sind:&lt;br /&gt;
# &amp;#039;&amp;#039;Wert lesen&amp;#039;&amp;#039;: Der Wert wird aus dem externen Speicher in den internen Speicher gelesen.&lt;br /&gt;
# &amp;#039;&amp;#039;Wert erhöhen&amp;#039;&amp;#039;: Der Wert wird im internen Speicher um 1 erhöht.&lt;br /&gt;
# &amp;#039;&amp;#039;Wert schreiben&amp;#039;&amp;#039;: Der Wert wird aus dem internen Speicher zurück in den externen Speicher geschrieben.&lt;br /&gt;
&lt;br /&gt;
Angenommen, der Wert betrage anfangs 1. Das erste System heißt A, das zweite System B. Erhöhen beide Systeme den Wert, ist der erwartete neue Wert 3. Wenn System A zeitlich vor System B arbeitet, wird das auch so sein:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable hintergrundfarbe1 rahmenfarbe1&amp;quot; style=&amp;quot;margin-top:1em; margin-bottom:1em;&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe6&amp;quot;&lt;br /&gt;
! Zeitpunkt&lt;br /&gt;
! System A&lt;br /&gt;
! Gespeicherter Wert&lt;br /&gt;
! System B&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einlesen des Wertes&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Erhöhen des internen Wertes um eins&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 2&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Speichern des Wertes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einlesen des Wertes&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 2&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Erhöhen des internen Wertes um eins&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 3&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Speichern des Wertes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Arbeiten beide Systeme gleichzeitig und ist die Reihenfolge der Befehle unbestimmt, kann die Wettlaufsituation jedoch dazu führen, dass der tatsächlich erhaltene neue Wert stattdessen 2 beträgt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable hintergrundfarbe1 rahmenfarbe1&amp;quot; style=&amp;quot;margin-top:1em; margin-bottom:1em;&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe6&amp;quot;&lt;br /&gt;
! Zeitpunkt&lt;br /&gt;
! System A&lt;br /&gt;
! Gespeicherter Wert&lt;br /&gt;
! System B&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einlesen des Wertes&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 1&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einlesen des Wertes&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Erhöhen des internen Wertes um eins&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 2&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Erhöhen des internen Wertes um eins&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Speichern des Wertes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Speichern des Wertes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zur Vermeidung des Problems müsste A den Zugriff auf den Wert bis zum Abschluss der Veränderung sperren, sodass B warten muss, bis A seinen Zugriff auf den Wert beendet hat.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable hintergrundfarbe1 rahmenfarbe1&amp;quot; style=&amp;quot;margin-top:1em; margin-bottom:1em;&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe6&amp;quot;&lt;br /&gt;
! Zeitpunkt&lt;br /&gt;
! System A&lt;br /&gt;
! Gespeicherter Wert&lt;br /&gt;
! System B&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Sperrung gegen fremde Zugriffe&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(falls dies nicht möglich ist: warten)&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einlesen des Wertes&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 1&lt;br /&gt;
| 1&lt;br /&gt;
| Versuch: &amp;#039;&amp;#039;&amp;#039;Sperrung gegen fremde Zugriffe&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(da nicht möglich: warten)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Erhöhen des internen Wertes um eins&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 2&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Auf Freigabe warten...&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Speichern des Wertes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Auf Freigabe warten...&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Aufheben der Sperrung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Sperrung gegen fremde Zugriffe&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;(nun erfolgreich)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einlesen des Wertes&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 2&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Erhöhen des internen Wertes um eins&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;Wert: 3&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Speichern des Wertes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Aufheben der Sperrung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Kritischer Abschnitt]]&lt;br /&gt;
* [[Deadlock (Informatik)]]&lt;br /&gt;
* [[Semaphor (Informatik)|Semaphor]]&lt;br /&gt;
* [[Time-of-Check-to-Time-of-Use-Problem]]&lt;br /&gt;
* [[Transaktion (Informatik)|Transaktion]]&lt;br /&gt;
* [[Schreib-Lese-Konflikt]]&lt;br /&gt;
* [[Verlorenes Update]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Parallelverarbeitung]]&lt;br /&gt;
[[Kategorie:Fehlermanagement (Softwaretechnik)]]&lt;br /&gt;
[[Kategorie:Programmfehler]]&lt;/div&gt;</summary>
		<author><name>~2026-18575-11</name></author>
	</entry>
</feed>