For faster navigation, this Iframe is preloading the Wikiwand page for Vzájemné vyloučení.

Vzájemné vyloučení

Jednoduchá ukázka konfliktu, který vznikne pokud dva procesy současně upravují stejná data. Právě tomu má zabránit algoritmus „vzájemné vyloučení“.

Vzájemné vyloučení (anglicky mutual exclusion, nebo zkráceně mutex) je algoritmus používaný v programování jako synchronizační prostředek. Zabraňuje tomu, aby byly současně vykonávány dva (nebo více) kritické kódy nad stejným sdíleným prostředkem, jako například globální proměnné. Kritický kód je část kódu, ve které proces nebo vlákno přistupuje k veřejným prostředkům. Kritický kód není mechanismus ani algoritmus pro vzájemné vyloučení. Pokud jeden proces vstoupil do kritického kódu a nedokončil poslední instrukci (nevystoupil z kritického kódu), nemůže nad tímto prostředkem žádný jiný proces vstoupit do kritického kódu.

Stavy mutexu

[editovat | editovat zdroj]

Mutex může nabývat dvou stavů: volný a vlastněný. K tomu udržuje dva druhy informace. Prvním je identifikátor procesu, který mutex drží. Druhým je počet uzamknutí. Počet uzamknutí je vyjádřen číslem, které aktualizuje operace lock (získání mutexu) nebo unlock (uvolnění mutexu). Cílem je zabránění více procesům držet daný mutex. Při vícenásobném uzamknutí musí být i stejný počet odemknutí.

Získání mutexu

[editovat | editovat zdroj]

Případy, jak proces získá mutex:

  • mutex je volný – proces se stává držitelem mutexu a počet uzamknutí je 1
  • mutex je vlastněn aktuálním procesem – počet uzamknutí se zvýší o 1
  • mutex je vlastněn neaktuálním procesem – proces se zablokuje a čeká na uvolnění mutexu

Uvolnění mutexu

[editovat | editovat zdroj]

Případy uvolnění mutexu procesem:

  • mutex je volný – nedefinovaný stav, nemůže dojít k vyššímu počtu odemčení než bylo zamčení
  • mutex je vlastněn aktuálním procesem – počet uzamknutí se sníží o 1, pokud je potom nulový, je uvolněn čekajícím procesům
  • mutex je vlastněn neaktuálním procesem – nedefinovaný stav, neaktuální proces nemůže uvolňovat mutex, ten tak nebude uvolněn

Nesprávné použití mutexu může vést ke zpomalení procesů, kdy většinu času jsou zablokovány ze vzájemného čekání, nebo v horším případě k uváznutí dvou a více procesů. Jako řešení potom musí být alespoň jeden proces ukončen.

Související články

[editovat | editovat zdroj]
{{bottomLinkPreText}} {{bottomLinkText}}
Vzájemné vyloučení
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?