Souběhová podmínka
Souběhová podmínka nastane, když softwarový program závisí na načasování jednoho nebo více procesů, aby správně fungoval. Pokud vlákno běží nebo skončí v neočekávanou dobu, může to způsobit nepředvídatelné chování, například nesprávný výstup nebo uváznutí programu.
Většina softwarových programů je vícevláknová, což znamená, že může zpracovávat několik vláken současně. Dobře naprogramovaná aplikace zajistí, aby byly výsledky jednotlivých vláken zpracovány v očekávaném pořadí. Pokud program závisí na vláknech, která se spouštějí v nepředvídatelném pořadí, může nastat souběhová podmínka.
Jednoduchým příkladem je logické hradlo, které zpracovává logické hodnoty. Hradlo AND má dva vstupy a jeden výstup. Pokud jsou vstupy A a B pravdivé, hradlo AND vytvoří hodnotu TRUE. Pokud je jeden nebo oba vstupy nepravdivé, vytvoří hodnotu FALSE. Souběhová podmínka může nastat, pokud program zkontroluje výsledek logického hradla dříve, než jsou načteny proměnné A a B. Správný postup by byl:
- Načíst proměnnou A
- Načíst proměnnou B
- Zkontrolovat výsledek logického hradla AND
Nesprávné pořadí by bylo:
- Načíst proměnnou A
- Zkontrolovat výsledek logického hradla AND
- Načíst proměnnou B
Výsledek druhého výše uvedeného příkladu může, ale nemusí být stejný jako u prvního příkladu. Proměnná B může být například FALSE před načtením i po něm, takže by se výsledek nezměnil. Pokud je A FALSE, nezáleží na tom, zda je B TRUE, nebo FALSE. Pokud jsou však A i B pravdivé, výsledkem by měla být hodnota TRUE. Načtení proměnné B až po kontrole výsledku logického hradla by vytvořilo nesprávný výsledek FALSE.
Nekonzistentní výstup způsobený souběhovými podmínkami může vést k chybám, které se obtížně odhalují. Programátoři se těmto problémům mohou vyhnout tím, že zajistí zpracování vláken v konzistentním pořadí.
Otestujte své znalosti