Sobes.tech
Junior — Middle

Jaké jsou hlavní rozdíly mezi klíčovými vlastnostmi proměnných označených jako volatile a atomických typů dat?

sobes.tech AI

Odpověď od AI

Proměnné označené jako volatile zaručují, že čtení a zápis této proměnné probíhají přímo z hlavní paměti, nikoli z cache procesoru. To zajišťuje viditelnost změn proměnné mezi vlákny, ale nezaručuje atomárnost operací. Operace jako inkrement (x++) nejsou atomické a mohou vést ke stavu závodu.

Atomické datové typy (například AtomicInteger v Javě) poskytují metody, které se provádějí atomicky — bez přerušení a s garancí správnosti při konkurenčním přístupu. Zajišťují jak viditelnost, tak atomárnost operací, což umožňuje bezpečně měnit hodnotu proměnné z více vláken bez použití zámků.

Příklad v Javě:

volatile int counter = 0; // viditelnost, ale ne atomickost
AtomicInteger atomicCounter = new AtomicInteger(0); // atomické operace

// Nesprávně pro volatile:
counter++;

// Správně pro AtomicInteger:
atomicCounter.incrementAndGet();