Какие ещё примитивы синхронизации, кроме mutex и WaitGroup, знаешь? Кейсы использования?
Ответ от нейросети
sobes.tech AI
Кроме mutex и WaitGroup в Go есть и другие примитивы синхронизации:
-
RWMutex — позволяет разделять блокировки на чтение и запись. Несколько горутин могут одновременно читать, но запись эксклюзивна. Используется, когда чтение преобладает над записью.
-
Cond (Condition Variable) — позволяет горутинам ждать наступления определённого условия и уведомлять друг друга. Полезно для реализации очередей, пулов ресурсов.
-
Once — гарантирует, что определённая функция выполнится ровно один раз, например, для инициализации.
-
Atomic операции (из пакета
sync/atomic) — позволяют выполнять операции с переменными без блокировок, например, инкремент счётчика. -
Channel — не совсем примитив синхронизации, но часто используется для координации горутин, передачи данных и сигналов.
Примеры кейсов:
- RWMutex — кэш, где много чтений и редкие записи.
- Cond — реализация пула соединений, где горутины ждут освобождения ресурса.
- Once — инициализация конфигурации приложения.
- Atomic — счётчики метрик без блокировок.
- Channel — передача задач между воркерами.