Souběh

Z Wikipedie, otevřené encyklopedie
(Přesměrováno z Race condition)
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é a závislé na pořadí nebo načasování 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).

Obsah

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

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]

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]

Atomické instrukce [editovat]

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]

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]

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]

Semafor je zobecněním instrukce TSL.

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

Příklady souběhu [editovat]

V životě [editovat]

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]

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]

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