Как работает atomic пакет?

Middle
941 просмотров
AFK Offer AI

sync/atomic — атомарные операции без мьютексов. Быстрее mutex для простых счётчиков и флагов.

var counter int64

// Атомарный инкремент atomic.AddInt64(&counter, 1)

// Атомарное чтение/запись val := atomic.LoadInt64(&counter) atomic.StoreInt64(&counter, 100)

// Compare-and-swap (CAS) swapped := atomic.CompareAndSwapInt64(&counter, 100, 200) // true если counter было 100, теперь 200

С Go 1.19 — типизированные обёртки:

var counter atomic.Int64
counter.Add(1)
counter.Store(100)
val := counter.Load()

var flag atomic.Bool flag.Store(true) if flag.Load() { ... }

var ptr atomic.Pointer[Config] ptr.Store(newConfig) cfg := ptr.Load()

Используй atomic для:

  • Счётчиков, флагов, метрик
  • Lock-free структур данных
  • Когда mutex — overkill для одной переменной

Следующий вопрос

Как работает testing.T?