Race condition
Z Wikipedie, otevřené encyklopedie
Souběh, anglicky též race condition, je nežádoucí stav, který nastane ve chvíli, kdy se zařízení (hardware) nebo operační systém (software) pokusí o vykonání dvou nebo více operací na sdílených datech ve stejný čas, přičemž dojde k chybě, i když samostatné procesy pracují korektně. Chyba je zapříčiněna tím, že jeden proces vstoupí ke sdíleným datům ve chvíli, kdy jiný proces na těchto datech již pracuje.
Datům, která jsou sdílena několika procesy tak, že při přístupu k nim hrozí možnost souběhu, říkáme kritická oblast. Nejmenší část programu, která pracuje s daty nějaké kritické oblasti, a která musí zároveň být provedena jako celek, se nazývá kritická sekce.
Souběh se nejčastěji vyskytuje ve víceúlohových systémech, kde se jednotlivé procesy střídají na procesoru tak, že vzniká dojem, že běží všechny najednou.
Obsah |
[editovat] Druhy souběhů
[editovat] Souběh u zařízení
V počítačové paměti souběh nastává ve chvíli, kdy ve stejném okamžiku přijde příkaz ke čtení i zapisování velkého objemu dat, přičemž se počítač pokusí přepsat stará data, zatímco jsou stejná data stále čtena.
Tím dojde ke zhroucení počítače a vypnutí celého programu. U dat může dojít k nečitelnosti. Tomu se dá předejít seřazením přístupu do paměti tak, aby v případě přijetí příkazu pro čtení a zapsání dat brzy po sobě byl dokončen nejdříve příkaz pro čtení.
[editovat] Souběh v sítích
V sítích nastává souběh v případě, kdy se dva uživatelé pokusí k přístupu na jeden kanál ve stejný okamžik a ani jeden počítač neobdrží upozornění, že kanál už byl obsazen před tím, než systém udělil přístup. Statisticky se tato shoda okolností nejvíce pravděpodobně vyskytuje v sítích s dlouhými zpožděními (latence), např. přístupy přes satelity.
Pro předejití takovýmto souběhům, musí být vymyšleno schéma priority. Například uživatel, jehož uživatelské jméno začíná nižším písmenem abecedy (nebo nižší číslicí), by měl dostat prioritu. Hackeři mohou využít napadnutelnosti souběhu k neautorizovanému přístupu k sítím.
[editovat] Souběh v číslicové technice
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)
[editovat] Příklady souběhu
[editovat] v praxi
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ěstanci 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ěstannec přišel o tisíc korun a připsala se mu jen ta stokoruna.
[editovat] v programování
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 - 2000; Konto := Pom2; <---------- Konto := Pom1;
[editovat] Předcházení souběhu
Nejlepší možnost, jak předejít kolizním stavům, je použití atomických funkcí. Jejich provádění není nikdy přerušeno jádrem, ale daná operace se nejdříve dokončí do konce.