> Какие примитивы синхронизации есть в стандартной библиотеке Go (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Lamoda

Стек: Go

> Пример ответа

В стандартной библиотеке Go (sync) есть несколько ключевых примитивов синхронизации:

  1. sync.Mutex - взаимное исключение (мьютекс). Используется для защиты критических секций от одновременного доступа нескольких горутин. Пример: mu.Lock() / mu.Unlock().

  2. sync.RWMutex - мьютекс с разделением на чтение и запись. Позволяет множеству горутин одновременно читать (RLock/RUnlock), но блокирует запись (Lock/Unlock) до освобождения всех читателей.

  3. sync.WaitGroup - ожидание завершения группы горутин. Методы: Add(n), Done(), Wait(). Идеально для параллельного выполнения задач.

  4. sync.Once - гарантирует однократное выполнение функции (например, инициализация синглтона). Метод: Do(f).

  5. sync.Cond - условная переменная. Позволяет горутинам ждать наступления события и пробуждаться по сигналу (Wait, Signal, Broadcast). Требует мьютекса.

  6. sync.Map - потокобезопасная карта (map) с оптимизациями для конкурентного доступа. Методы: Load, Store, Delete, LoadOrStore и др.

  7. sync.Pool - пул временных объектов, снижающий нагрузку на сборщик мусора. Методы: Get, Put.

  8. sync/atomic - пакет для атомарных операций над примитивными типами (AddInt64, CompareAndSwap, Load, Store). Используется для lock-free синхронизации.

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

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью