Ответ
Нет, атомарные операции в Go (sync/atomic) не являются блокирующими. Они выполняются за одну инструкцию процессора, что обеспечивает безопасность при работе с общими данными без использования мьютексов.
Пример:
var counter int32
func increment() {
atomic.AddInt32(&counter, 1) // Неблокирующая операция
}
Плюсы:
- Высокая производительность (нет переключения контекста).
- Подходит для простых операций (инкремент, загрузка, сравнение).
Минусы:
- Не подходит для сложных операций (например, изменение нескольких переменных).
- Нет гарантии порядка выполнения между горутинами.
Для сложных сценариев лучше использовать мьютексы (sync.Mutex).