Какие примитивы синхронизации есть в Go?
Answer from AI
sobes.tech AI
В Go есть несколько примитивов синхронизации, которые помогают управлять конкурентным доступом к ресурсам:
-
Mutex (sync.Mutex) — обеспечивает взаимное исключение, блокируя доступ к критической секции.
-
RWMutex (sync.RWMutex) — расширение Mutex, позволяющее нескольким читателям одновременно получать доступ, но блокирует запись, пока есть активные читатели.
-
WaitGroup (sync.WaitGroup) — используется для ожидания завершения группы горутин.
-
Cond (sync.Cond) — условная переменная для уведомления горутин о наступлении определенного состояния.
-
Once (sync.Once) — гарантирует, что функция выполнится только один раз.
-
Atomic операции (sync/atomic) — низкоуровневые операции для атомарного чтения и записи значений без блокировок.
Пример использования Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Эти примитивы позволяют эффективно и безопасно работать с конкурентностью в Go.