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

Какие примитивы синхронизации знаете?

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

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

sobes.tech AI

В Go есть несколько основных примитивов синхронизации для управления конкурентным доступом к ресурсам:

  • Mutex (sync.Mutex) — обеспечивает взаимное исключение, блокируя доступ к критической секции.
  • RWMutex (sync.RWMutex) — расширенный мьютекс, позволяющий нескольким читателям одновременно читать, но блокирующий запись.
  • WaitGroup (sync.WaitGroup) — позволяет ждать завершения группы горутин.
  • Cond (sync.Cond) — условная переменная для уведомления горутин о наступлении события.
  • Atomic операции (sync/atomic) — низкоуровневые операции для атомарного чтения и записи переменных.

Кроме того, в Go широко используются каналы (channels), которые позволяют синхронизировать горутины и передавать данные между ними без явного использования мьютексов.

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

var mu sync.Mutex
var counter int

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

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

var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    // работа
}()
go func() {
    defer wg.Done()
    // работа
}()
wg.Wait()