Sobes.tech
Назад к вопросам
Senior
2

Какие конкретно примитивы синхронизации есть в Go?

Компании, где спрашивали
Prediva

Ответ от нейросети

sobes.tech AI

В Go есть несколько основных примитивов синхронизации, которые помогают управлять конкурентным доступом к ресурсам:

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

  • RWMutex (sync.RWMutex) — расширенный мьютекс с поддержкой нескольких читателей или одного писателя. Позволяет повысить производительность при частом чтении и редком изменении.

  • WaitGroup (sync.WaitGroup) — позволяет ждать завершения группы горутин. Используется для синхронизации окончания работы.

  • Cond (sync.Cond) — условная переменная для реализации ожидания и уведомления между горутинами.

  • Atomic операции (sync/atomic) — низкоуровневые атомарные операции для безопасного изменения переменных без блокировок.

Пример использования Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}