Race Condition, česky "souběh" nebo "závodní stav", je kritická chyba v softwaru, která nastává, když se více procesů nebo vláken snaží přistupovat a manipulovat se sdíleným zdrojem (například proměnnou, souborem nebo databázovým záznamem) ve stejný čas. Výsledek operace se pak stává nepředvídatelným a závisí na náhodném pořadí, v jakém se jednotlivé operace stihnou vykonat.
Klasickým příkladem je rezervační systém. Představte si, že v systému zbývá poslední volné místo na koncert. Dva zákazníci, Adam a Bára, si ve stejný okamžik otevřou stránku a oba vidí, že je jedno místo volné. Oba kliknou na "Rezervovat". Systém Adama zkontroluje, že je volno, a začne zpracovávat jeho rezervaci. Těsně předtím, než stav změní na "obsazeno", systém Báry také zkontroluje, že je volno (protože Adamova změna se ještě neuložila), a také začne zpracovávat její rezervaci. Výsledkem je, že se prodají dvě vstupenky na jedno místo.
Tyto chyby jsou notoricky známé tím, jak obtížně se hledají a opravují. Projevují se jen za velmi specifických podmínek a časování, takže je téměř nemožné je nasimulovat při běžném testování. Prevence Race Condition spočívá v použití synchronizačních mechanismů, jako jsou "zámky" (locks) nebo "semafory", které zajišťují, že ke kritické části kódu může v jeden okamžik přistupovat pouze jedno vlákno. Tím se zaručí, že operace proběhnou hezky popořadě a ne "přes sebe".