Atomická operace

Atomická operace je operace, která nemůže být v průběhu svého vykonávání přerušena žádnou jinou událostí nebo vláknem. Zatímco běžné operace se na úrovni procesoru rozkládají na více kroků (čtení, úprava, zápis), atomická operace proběhne „v jednom kuse“.

Rozdíl mezi běžnou a atomickou operací

Většina příkazů ve vyšších programovacích jazycích (C++, Java, Python) není atomická, i když vypadají jednoduše.

Běžná operace (Ne-atomická):

Představte si příkaz i++ (přičtení jedničky). Procesor musí:

1. Načíst hodnotu ''i'' z paměti do registru.
2. Přičíst 1 k hodnotě v registru.
3. Zapsat novou hodnotu z registru zpět do paměti.

Pokud je procesor uprostřed těchto kroků přerušen jiným vláknem, dojde k chybě souběhu.

Atomická operace:

Všechny tři kroky výše se spojí do jedné nedělitelné instrukce. Žádné jiné vlákno se nemůže „vmezeřit“ mezi načtení a zápis.

Hardwarová podpora (CAS)

Atomické operace jsou implementovány přímo v instrukční sadě procesoru. Nejpoužívanější technikou je Compare-and-Swap (CAS):

Procesor dostane tři parametry: adresu v paměti, očekávanou starou hodnotu a novou hodnotu.

Pouze pokud je v paměti stále ta „očekávaná stará hodnota“, přepíše ji na „novou“.

Pokud se hodnota v mezičase změnila, operace selže a vlákno to může zkusit znovu.

Výhody a nevýhody

Výhody:

Bezpečnost: Zabraňují poškození dat bez nutnosti složitého zamykání.

Rychlost (Lock-free): Na rozdíl od Mutexu nevyžadují uspání a probuzení vlákna operačním systémem, což je mnohem efektivnější.

Ochrana proti Deadlocku: Protože se nic nepoužívá k „zamykání“, nemůže dojít k uváznutí.

Nevýhody:

Omezenost: Jsou dostupné jen pro jednoduché operace (čísla, ukazatele). Nelze atomicky provést celou složitou funkci.

Problém ABA: Specifická chyba u CAS, kdy se hodnota změní z A na B a zpět na A, takže procesor si myslí, že se nic nestalo (i když se stát mohlo).

Praktické využití

Atomické operace tvoří základ pro:

Počítadla: Například počet návštěv na webu nebo počet aktivních spojení.

Fronty a zásobníky: Výměna dat mezi vlákny bez rizika ztráty zprávy.

Implementace Mutexů: Samotné zamykací mechanismy (jako Mutexy) jsou vnitřně postaveny na atomických operacích.

Související pojmy: Thread (Vlákno), Race Condition, Mutex, Deadlock, CPU, Synchronizace.