| Zeile 2: | Zeile 2: | ||
== Beispiel == | == Beispiel == | ||
| − | Wie könnte eine Race Condition aussehen? Meistens handelt es sich um zwei [[Prozess|Prozesse]], die die gleiche Funktion ausführen. Nehmen wir also eine hypothetische Funktion namens I_want_the_printer_now(), die den Drucker für den aktuellen Prozess reserviert, damit kein anderer Prozess darauf zugreifen kann. Außerdem gibt es eine Funktion, die den Drucker wieder freigibt, release_printer(). Der Code könnte zum Beispiel so aussehen: | + | Wie könnte eine Race Condition aussehen? Meistens handelt es sich um zwei [[Prozess|Prozesse]], die die gleiche Funktion ausführen. Nehmen wir also eine hypothetische Funktion namens <code>I_want_the_printer_now()</code>, die den Drucker für den aktuellen Prozess reserviert, damit kein anderer Prozess darauf zugreifen kann. Außerdem gibt es eine Funktion, die den Drucker wieder freigibt, <code>release_printer()</code>. Der Code könnte zum Beispiel so aussehen: |
| − | <c>static int printer_reserved = 0; | + | <syntaxhighlight lang="c"> |
| + | static int printer_reserved = 0; | ||
void I_want_the_printer_now() | void I_want_the_printer_now() | ||
| Zeile 14: | Zeile 15: | ||
{ | { | ||
printer_reserved = 0; | printer_reserved = 0; | ||
| − | }</ | + | }</syntaxhighlight> |
Wenn ein Prozess drucken möchte, macht er das folgendermaßen: | Wenn ein Prozess drucken möchte, macht er das folgendermaßen: | ||
| − | <c>I_want_the_printer_now(); | + | <syntaxhighlight lang="c"> |
| + | I_want_the_printer_now(); | ||
//Drucken, drucken, drucken... | //Drucken, drucken, drucken... | ||
| − | release_printer()</ | + | release_printer() |
| + | </syntaxhighlight> | ||
| − | Was passiert nun, wenn zwei Prozesse versuchen, zu drucken? Normalerweise wird zuerst I_want_the_printer_now() ausgeführt, dann unterbricht der Scheduler während des Druckens und der nächste Prozess stellt fest, dass der Drucker belegt ist. Das läuft dann so ab: | + | Was passiert nun, wenn zwei Prozesse versuchen, zu drucken? Normalerweise wird zuerst <code>I_want_the_printer_now()</code> ausgeführt, dann unterbricht der Scheduler während des Druckens und der nächste Prozess stellt fest, dass der Drucker belegt ist. Das läuft dann so ab: |
<center> | <center> | ||
{| {{Prettytable}} cellpadding="5" | {| {{Prettytable}} cellpadding="5" | ||