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

Какие типы синхронизации данных знаете для предотвращения race condition и data race?

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

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

sobes.tech AI

Для предотвращения race condition и data race в Go используются следующие типы синхронизации:

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

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

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

  • Каналы (chan) — позволяют безопасно передавать данные между горутинами, обеспечивая синхронизацию через коммуникацию.

  • WaitGroup (sync.WaitGroup) — для ожидания завершения группы горутин.

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

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

var mu sync.Mutex
var counter int

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

Использование этих инструментов позволяет избежать гонок данных и обеспечить корректную работу конкурентных программ.