Назад к вопросам
Middle+
1
Какие примитивы синхронизации использовал в Go?
Компании, где спрашивали
Защита Инфо Транс z-it
Ответ от нейросети
sobes.tech AI
В Go для синхронизации горутин используются следующие примитивы:
- Mutex (sync.Mutex) — базовый мьютекс для взаимного исключения, блокирует доступ к разделяемым ресурсам.
- RWMutex (sync.RWMutex) — мьютекс с разделением на блокировку для чтения и записи, позволяет нескольким читателям одновременно, но только одному писателю.
- WaitGroup (sync.WaitGroup) — позволяет ждать завершения группы горутин.
- Cond (sync.Cond) — условная переменная для уведомления горутин о наступлении определённого состояния.
- Once (sync.Once) — гарантирует однократное выполнение функции.
- Atomic операции (sync/atomic) — для атомарных операций над переменными без блокировок.
Пример использования Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Эти примитивы позволяют эффективно управлять конкурентным доступом и синхронизацией в многопоточных программах на Go.