Souběh

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Souběh (anglicky race condition) je chyba v systému nebo procesu, ve kterém jsou výsledky nepředvídatelné při nesprávném pořadí nebo načasování jeho jednotlivých operací. Souběh může nastat v elektronických systémech (zvláště u logických členů) a v počítačových programech (zejména ve víceúlohových a víceprocesorových systémech).

Souběh v počítačových programech[editovat | editovat zdroj]

Souběh je v počítačových programech způsoben chybným současným zpracováním sdílených dat. Pokud by byla data zpracována postupně, k chybě by nedošlo. Problémem je, že ke změně dat dojde ve chvíli, kdy se se stejnými daty již pracuje jiná úloha. Souběh způsobuje změna kontextu ve víceúlohových systémech nebo současné zpracování úloh na víceprocesorových systémech.

Kritická oblast je označení dat, která jsou souběhem ohrožena. Kritická sekce je nejmenší část programu, která pracuje s daty v kritické oblasti.

Souběh v číslicové technice[editovat | editovat zdroj]

Souběh může příležitostně nastat i u logických členů, protože různé části obvodu mohou mít různou délku odezvy a je tak možné se dostat do kolizního stavu (viz Grayův kód).

Předcházení souběhu[editovat | editovat zdroj]

Atomické instrukce[editovat | editovat zdroj]

Atomické instrukce procesoru jsou vždy vykonány bez přerušení. Lze je využít ve víceúlohových systémech s jedním procesorem. Nepomohou ve víceprocesorových systémech, kde dochází ke skutečnému paralelnímu zpracování dat.

Zakázání přerušení[editovat | editovat zdroj]

Zakázání přerušení umožňuje vytvořit atomickou operaci z více strojových instrukcí. Na začátku operace je přerušení zakázáno, po dokončení operace je opět povoleno. Sled instrukcí tak nemůže být nijak přerušen. Protože je však zakázání přerušení velmi nebezpečné pro stabilitu systému, může tuto metodu zpravidla používat pouze operační systém. Zakázání přerušení není možné použít ve víceprocesorových systémech.

Instrukce TSL[editovat | editovat zdroj]

Instrukce TSL (anglicky Test and Set Lock) umožňuje vytvořit zámek, který zajistí pouze jedinému procesu vstup do kritické sekce.

Podrobnější informace naleznete v článku TSL.

Semafor[editovat | editovat zdroj]

Semafor je zobecněním instrukce TSL.

Související informace naleznete také v článku Semafor (synchronizace).

Příklady souběhu[editovat | editovat zdroj]

V životě[editovat | editovat zdroj]

Sekretářka přidává všem zaměstnancům v účetním programu sto korun. U posledního zaměstnance nestihne uložit změny a jde uvařit šéfovi kafe. Její nadřízený mezitím otevře stejný program s tím, že onomu poslednímu zaměstnanci přidá na prémiích tisíc korun a změny uloží. Změny se uloží na serveru, ale ne u sekretářky, která se mezitím vrátila a změny uložila. Z toho plyne, že zaměstnanec přišel o tisíc korun a připsala se mu jen ta stokoruna.

V programování[editovat | editovat zdroj]

Současně provedený výběr a vklad peněz v bance:

1. proces 2. proces

Pom1 := Konto;
Pom1 := Pom1 + 1000;
----------->
Pom2 := Konto;
Pom2 := Pom2 - 1000;
Konto := Pom2;
<----------
Konto := Pom1;

Literatura[editovat | editovat zdroj]

  • KOLÁŘ, Petr. Operační systémy [online]. Liberec: 2005-02-01, [cit. 2008-08-30]. Dostupné online.