3.2.11.3.1 Mutex

[gesichtete Version][gesichtete Version]
Zeile 25: Zeile 25:
<loop_index>mutal exclusion|gegenseitiger Ausschluss|wechselseitiger Ausschluss</loop_index>
<loop_index>mutal exclusion|gegenseitiger Ausschluss|wechselseitiger Ausschluss</loop_index>
Ein [[Semaphore#Definition:_Binärer_Semaphor|binärer Semaphor]] oder Mutex ist geeignet, um [[Kritischer Abschnitt|kritische Abschnitte]] vor gleichzeitigem Betreten zu sichern. Man spricht in diesem Zusammenhang von einem ''wechselseitigen Ausschluss'' (auf englisch: ''mutual exclusion'') der beteiligten Prozesse.
Ein [[Semaphore#Definition:_Binärer_Semaphor|binärer Semaphor]] oder Mutex ist geeignet, um [[Kritischer Abschnitt|kritische Abschnitte]] vor gleichzeitigem Betreten zu sichern. Man spricht in diesem Zusammenhang von einem ''wechselseitigen Ausschluss'' (auf englisch: ''mutual exclusion'') der beteiligten Prozesse.
</p>
<p>
Möchte ein Prozess in seinen kritischen Abschnitt eintreten, so muss er zunächst die Funktion '''<span style="font-family:Courier">P(s)</span>''' (bzw. '''<span style="font-family:Courier">down(s)</span>''') aufrufen. Hier wird geprüft, ob die Zählvariable des übergebenen Semaphors&nbsp; '''<span style="font-family:Courier">s</span>'''&nbsp; noch einen Wert größergleich Eins (>=1) besitzt.
</p>
<p>
* Falls ja: verringere den Wert der Zählvariablen um 1 und verlasse die Funktion wieder (der kritische Abschnitt darf also betreten werden).
</p>
<p>
* Falls nein: Der aufrufende Prozess wird angehalten ([[Prozesszustände|blockiert]]) und in die Warteschlange des Semaphors&nbsp; '''<span style="font-family:Courier">s</span>'''&nbsp; eingereiht (der kritische Abschnitt darf noch nicht betreten werden).
</p>
<p>
Am Ende der Bearbeitung eines kritischen Abschnitts muss der betreffende Prozess die Funktion '''<span style="font-family:Courier">V(s)</span>''' (bzw. '''<span style="font-family:Courier">up(s)</span>''') aufrufen. Der Wert der Zählvariable des übergebenen Semaphors&nbsp; '''<span style="font-family:Courier">s</span>'''&nbsp; wird um Eins erhöht, und falls sich in der Warteschlange des Semaphors ein (oder mehrere) Prozess(e) befinden, so entferne den ersten daraus und ändere seinen Zustand in [[Prozesszustände|bereit]]. Bei der nächsten Zuteilung der CPU kann dieser damit seinen kritischen Abschnitt betreten.
</p>
</p>



Version vom 6. Februar 2015, 14:47 Uhr

Mutex

Zunächst die Definition:


Definition: Mutex

Definition

Unter einem Mutex (als Abkürzung für MUTual EXclusion, auf deutsch: gegenseitiger Ausschluss) versteht man einen binären Semaphor.


Mit dieser Definition geht einher, dass ein Mutex eine ganzzahlige Variable besitzt, welche nur die Werte 0 und 1 annehmen darf. Ebenso besitzt er eine Warteschlange, sowie die P()- und V()-Operationen.


Ein binärer Semaphor oder Mutex ist geeignet, um kritische Abschnitte vor gleichzeitigem Betreten zu sichern. Man spricht in diesem Zusammenhang von einem wechselseitigen Ausschluss (auf englisch: mutual exclusion) der beteiligten Prozesse.

Möchte ein Prozess in seinen kritischen Abschnitt eintreten, so muss er zunächst die Funktion P(s) (bzw. down(s)) aufrufen. Hier wird geprüft, ob die Zählvariable des übergebenen Semaphors  s  noch einen Wert größergleich Eins (>=1) besitzt.

  • Falls ja: verringere den Wert der Zählvariablen um 1 und verlasse die Funktion wieder (der kritische Abschnitt darf also betreten werden).

  • Falls nein: Der aufrufende Prozess wird angehalten (blockiert) und in die Warteschlange des Semaphors  s  eingereiht (der kritische Abschnitt darf noch nicht betreten werden).

Am Ende der Bearbeitung eines kritischen Abschnitts muss der betreffende Prozess die Funktion V(s) (bzw. up(s)) aufrufen. Der Wert der Zählvariable des übergebenen Semaphors  s  wird um Eins erhöht, und falls sich in der Warteschlange des Semaphors ein (oder mehrere) Prozess(e) befinden, so entferne den ersten daraus und ändere seinen Zustand in bereit. Bei der nächsten Zuteilung der CPU kann dieser damit seinen kritischen Abschnitt betreten.