Sobes.tech
Back to questions
Senior
1

Какие ещё примитивы синхронизации, кроме mutex и WaitGroup, знаешь? Кейсы использования?

Companies where asked
СБК ПАРУС

Answer from AI

sobes.tech AI

Кроме mutex и WaitGroup в Go есть и другие примитивы синхронизации:

  • RWMutex — позволяет разделять блокировки на чтение и запись. Несколько горутин могут одновременно читать, но запись эксклюзивна. Используется, когда чтение преобладает над записью.

  • Cond (Condition Variable) — позволяет горутинам ждать наступления определённого условия и уведомлять друг друга. Полезно для реализации очередей, пулов ресурсов.

  • Once — гарантирует, что определённая функция выполнится ровно один раз, например, для инициализации.

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

  • Channel — не совсем примитив синхронизации, но часто используется для координации горутин, передачи данных и сигналов.

Примеры кейсов:

  • RWMutex — кэш, где много чтений и редкие записи.
  • Cond — реализация пула соединений, где горутины ждут освобождения ресурса.
  • Once — инициализация конфигурации приложения.
  • Atomic — счётчики метрик без блокировок.
  • Channel — передача задач между воркерами.