Атомарные операции выполняются целиком, без возможности прерывания другим потоком. В Go это пакет sync/atomic — операции с числами и указателями на уровне CPU-инструкций.
var counter int64
// горутинобезопасно без мьютекса
atomic.AddInt64(&counter, 1)
val := atomic.LoadInt64(&counter)
atomic.StoreInt64(&counter, 0)
atomic.CompareAndSwapInt64(&counter, old, new)
Атомарные операции быстрее мьютексов (наносекунды vs микросекунды), но подходят только для простых операций — один счётчик, один флаг. Для сложных invariants (несколько связанных переменных) нужен мьютекс.