Какие инструменты синхронизации данных знаете в Go?
Ответ от нейросети
sobes.tech AI
В Go для синхронизации данных и управления конкурентным доступом к ресурсам используются следующие основные инструменты:
-
Mutex (sync.Mutex) — простой мьютекс для взаимного исключения, блокирует доступ к критической секции.
-
RWMutex (sync.RWMutex) — мьютекс с разделением на блокировку для чтения и записи, позволяет нескольким горутинам читать одновременно, но запись эксклюзивна.
-
WaitGroup (sync.WaitGroup) — для ожидания завершения группы горутин.
-
Cond (sync.Cond) — условная переменная для уведомления горутин о наступлении события.
-
Atomic операции (sync/atomic) — для безопасного изменения числовых значений без блокировок.
-
Channels — канал для передачи данных между горутинами, часто используется для синхронизации и коммуникации.
Пример использования Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Пример с каналом для синхронизации:
done := make(chan struct{})
go func() {
// работа
done <- struct{}{}
}()
<-done // ожидание завершения
Выбор инструмента зависит от конкретной задачи: для защиты данных — мьютексы, для коммуникации и сигнализации — каналы.