Являются ли операции с Atomic блокирующими

«Являются ли операции с Atomic блокирующими» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, атомарные операции в Go (sync/atomic) не являются блокирующими. Они выполняются за одну инструкцию процессора, что обеспечивает безопасность при работе с общими данными без использования мьютексов.

Пример:

var counter int32

func increment() {
    atomic.AddInt32(&counter, 1) // Неблокирующая операция
}

Плюсы:

  • Высокая производительность (нет переключения контекста).
  • Подходит для простых операций (инкремент, загрузка, сравнение).

Минусы:

  • Не подходит для сложных операций (например, изменение нескольких переменных).
  • Нет гарантии порядка выполнения между горутинами.

Для сложных сценариев лучше использовать мьютексы (sync.Mutex).