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

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

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

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

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.