Какие конкретно примитивы синхронизации есть в Go?
Answer from AI
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++
}