====== 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 [[thread|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ě [[race_condition|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 [[mutex|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 [[deadlock|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.//