Souběh

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

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

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

Atomické instrukce

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í

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

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 Test-and-set.

Semafor

Semafor je zobecněním instrukce TSL.

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

Příklady souběhu

Sdílené soubory

Výše výplat jednotlivých zaměstnanců je uložena v souborech, které jsou sdíleny. Sekretářka přidává všem zaměstnancům v účetním programu 100 korun. Když otevře sdílený soubor s výplatou posledního zaměstnance, změny neuloží a přeruší práci (jde nadřízenému uvařit kafe). Obsah souboru zůstane načten v paměti počítače. Nadřízený mezitím otevře stejný soubor výplatou posledního zaměstnance (tedy načte stejnou původní částku jako sekretářka) a rozhodne se mu přidat na prémiích 1000 korun. K zobrazené výplatě přičte 1000 korun, částku přepíše a změněný soubor uloží. Sekretářka se mezi tím vrátí ke svému počítači. Vidí původní výplatu (nikoliv zvýšenou částku), přičte 100 korun a změněný soubor uloží. Výsledkem je, že zaměstnanec přišel o 1000 korun od nadřízeného a výplata byla zvýšena jen o částku 100 korun od sekretářky (zápis sekretářky přemazal změnu provedenou nadřízeným).

Sdílené proměnné

Dva procesy sdílí proměnnou Konto. Střídavě (díky multitaskingu) zaúčtovávají změny, přičemž výsledek si připravují ve svých privátních proměnných Pom1 a Pom2. První proces nejprve spočítá zvýšení o 1000 korun v proměnné Pom1, ale výsledek nestihne uložit do společné proměnné Konto, protože dojde ke změně kontextu (přepnutí do druhého procesu). Druhý proces od částky v proměnné Konto odečte 1000 korun a výsledek uloží zpět do společné proměnné Konto. Po další změně kontextu dojde v prvním procesu k přepsání částky v proměnné Konto obsahem proměnné Pom1 (je v ní uložen předtím provedený výpočet). Výsledkem této posloupnosti je ztráta odečtené částky (v proměnné Konto bude jen zvýšená částka od prvního procesu).

1. proces                2. proces

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

Literatura

  • KOLÁŘ, Petr. Operační systémy [online]. Liberec: 2005-02-01 [cit. 2008-08-30]. Dostupné v archivu pořízeném dne 2014-07-14. 

Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Race_condition
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.