Sobes.tech
Назад к вопросам
Middle+
1

Какие инструменты синхронизации данных знаете в 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 // ожидание завершения

Выбор инструмента зависит от конкретной задачи: для защиты данных — мьютексы, для коммуникации и сигнализации — каналы.