3.2.11.1.2 Race Conditions

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
 
(20 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<p>
<p>
{{#index:Race Conditions}}
<loop_index id="5fa97874cfc80">Race Conditions</loop_index>
Bevor auf die eigentliche Definition von Race Conditions eingegangen wird, seien einige Hintergründe anhand eines Beispiels erläutert.
Bevor auf die eigentliche Definition von Race Conditions eingegangen wird, seien einige Hintergründe anhand eines Beispiels erläutert.
</p>
</p>


<br />
<br />
==== Beispiel ====
== Beispiel ==
<p>
<p>
Das folgende Video zeigt ein anschauliches Beispiel für Race Conditions:
Das folgende Video zeigt ein anschauliches Beispiel für Race Conditions:
Zeile 11: Zeile 11:


<p>
<p>
<loop_media type="video" title="Platzhalter-Video" description="Bald erscheint hier der geplante Inhalt..." copyright="CC-BY" index=true show_copyright=true>
<loop_media type="video" title="Race Conditions (04:50)" description="http://youtu.be/dlOg4Dz-bgM" copyright="CC-BY" index=true show_copyright=true id="5fa97874cfc89">
{{#ev:youtube|kSQJPIWzd5U|700}}
{{#ev:youtube|dlOg4Dz-bgM|700}}
</loop_media>
</loop_media>
</p>
</p>


<br />
<br />
==== Quellcode aus dem Video ====
 
== Quellcode aus dem Video ==
<p>
<p>
Hier ist der Quellcode aus dem Video:
Hier ist der Quellcode aus dem Video:
</p>
</p>


<p>
<p id="Listing_1">
<loop_listing title="Beispiel: Race Conditions" description="JAVA-Pprogramm mit zwei Threads. Bei der Ausführung kommt es zu Race Conditions.">
<loop_listing title="Listing 1: Beispiel für Race Conditions" description="Ein Java-Programm mit zwei Threads. Bei der Ausführung kommt es zu Race Conditions." id="5fa97874cfc8e">
<source lang="java" line="true">
<source lang="java" line="true">
public class Beispiel_Race_Conditions {
public class Beispiel_Race_Conditions {


static int counter = 0;
static int counter = 0;


public static class Counter_Thread_A extends Thread {
public static class Counter_Thread_A extends Thread {
public void run() {
public void run() {
counter = 10;
counter = 10;
counter++;
counter++;
counter++;
counter++;
System.out.println("A-Counter: " + counter);
System.out.println("A-Counter: " + counter);
}
}
}
}


public static class Counter_Thread_B extends Thread {
public static class Counter_Thread_B extends Thread {
public void run() {
public void run() {
counter = 20;
counter = 20;
counter++;
counter++;
counter++;
counter++;
counter++;
counter++;
counter++;
counter++;
counter++;
counter++;
counter++;
counter++;
System.out.println("B-Counter: " + counter);
System.out.println("B-Counter: " + counter);
}
}
}
}
public static void main(String[] args) {
Thread a = new Counter_Thread_A();
Thread b = new Counter_Thread_B();
a.start();
b.start();
}


public static void main(String[] args) {
Thread a = new Counter_Thread_A();
Thread b = new Counter_Thread_B();
a.start();
b.start();
}
}
}
</source>
</source>
Zeile 64: Zeile 66:
<br />
<br />


==== Definition: Race Conditions ====
== Definition: Race Conditions ==
<p>
<p>
<loop_area type="definition">
<loop_area type="definition">
<p>
<p>
{{#index:kritischer Ablauf|Ablauf, kritisch}}
<loop_index id="5fa97874cfc92">kritischer Ablauf</loop_index><loop_index id="5fa978756bc99">Ablauf, kritisch</loop_index>
Unter '''Race Conditions''' (oder einem '''kritischem Ablauf''') versteht man Situationen, bei denen zwei oder mehr Prozesse (bzw. Threads) ein oder mehrere Betriebsmittel gemeinsam nutzen, und das Ergebnis der Ausführung von der zeitlichen Reihenfolge der Zugriffe der beteiligten Prozesse oder Threads auf das (bzw. die) Betriebsmittel abhängt.
Unter '''Race Conditions''' (oder einem '''kritischem Ablauf''') versteht man Situationen, bei denen zwei oder mehr Prozesse (bzw. Threads) ein oder mehrere Betriebsmittel gemeinsam nutzen, und das Ergebnis der Ausführung von der zeitlichen Reihenfolge der Zugriffe der beteiligten Prozesse oder Threads auf das (bzw. die) Betriebsmittel abhängt.
</p>
</p>
Zeile 74: Zeile 76:
</p>
</p>


<br />
<p>
<p>
Man bemerke, dass Race Conditions nicht allein durch [[Synchronisation#Definition:_Nebenl.C3.A4ufigkeit|nebenläufige Ausführung]] von Prozessen oder Threads entstehen. Erst wenn gemeinsam genutzte Betriebsmittel im Spiel sind, kommt es zu kritischen Abläufen.
Man bemerke, dass Race Conditions nicht allein durch [[Nebenläufigkeit|nebenläufige Ausführung]] von Prozessen oder Threads entstehen. Erst wenn ''gemeinsam genutzte'' Betriebsmittel im Spiel sind, kommt es zu kritischen Abläufen.
</p>
</p>


<br />
== Aufgabe 1 ==
<p>
<p>
Im Quelltext der beteiligten Prozesse oder Threads lassen sich dann sogar Abschnitte identifizieren, welche ''kritisch'' oder ''unkritisch'' im Hinblick auf Race Conditions sind.
<loop_area type="task">
<loop_task title="Gemeinsam genutzes Betriebsmittel" id="5fa97874cfc98">
<p>
Was ist das gemeinsam genutzte Betriebsmittel in [[Race_Conditions#Listing_1|Listing 1 oben]]?
</p>
</loop_task>
</loop_area>
</p>
 
<br />
 
== Aufgabe 2 ==
<p>
<loop_area type="task">
<loop_task title="Kleiner Fehler bei den Erklärungen im Video" id="5fa97874cfc9c">
<p>
In den Erläuterungen im Video gibt es einen kleinen Fehler (dort, wo beide Threads den Wert 12 ausgeben). Was ist gemeint?
</p>
<spoiler text="Tipp">
<p>
Es geht um die Reihenfolge, in der die beiden Threads ihre Ausgaben tätigen.
</p>
</spoiler>
</loop_task>
</loop_area>
</p>
</p>



Aktuelle Version vom 30. Dezember 2022, 11:59 Uhr

Bevor auf die eigentliche Definition von Race Conditions eingegangen wird, seien einige Hintergründe anhand eines Beispiels erläutert.


Beispiel

Das folgende Video zeigt ein anschauliches Beispiel für Race Conditions:


Quellcode aus dem Video

Hier ist der Quellcode aus dem Video:

public class Beispiel_Race_Conditions {

static int counter = 0;

public static class Counter_Thread_A extends Thread {
	public void run() {
		counter = 10;
		counter++;
		counter++;
		System.out.println("A-Counter: " + counter);
	}
}

public static class Counter_Thread_B extends Thread {
	public void run() {
		counter = 20;
		counter++;
		counter++;
		counter++;
		counter++;
		counter++;
		counter++;
		System.out.println("B-Counter: " + counter);
	}
}

public static void main(String[] args) {
	Thread a = new Counter_Thread_A();
	Thread b = new Counter_Thread_B();
	a.start();
	b.start();
}

}


Definition: Race Conditions

Definition

Unter Race Conditions (oder einem kritischem Ablauf) versteht man Situationen, bei denen zwei oder mehr Prozesse (bzw. Threads) ein oder mehrere Betriebsmittel gemeinsam nutzen, und das Ergebnis der Ausführung von der zeitlichen Reihenfolge der Zugriffe der beteiligten Prozesse oder Threads auf das (bzw. die) Betriebsmittel abhängt.


Man bemerke, dass Race Conditions nicht allein durch nebenläufige Ausführung von Prozessen oder Threads entstehen. Erst wenn gemeinsam genutzte Betriebsmittel im Spiel sind, kommt es zu kritischen Abläufen.


Aufgabe 1

Aufgabe

Was ist das gemeinsam genutzte Betriebsmittel in Listing 1 oben?


Aufgabe 2

Aufgabe

In den Erläuterungen im Video gibt es einen kleinen Fehler (dort, wo beide Threads den Wert 12 ausgeben). Was ist gemeint?



Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png