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

Расскажите про работу с атомиками и мьютексами.

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

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

sobes.tech AI

В Go атомарные операции и мьютексы используются для синхронизации доступа к общим ресурсам в конкурентной среде.

Атомики (пакет sync/atomic) позволяют выполнять низкоуровневые операции над переменными (например, инкремент, сравнение и обмен) без блокировок. Они эффективны для простых случаев, когда нужно гарантировать атомарность изменения значения.

Пример атомарного инкремента:

import (
    "sync/atomic"
    "fmt"
)

var counter int64

func increment() {
    atomic.AddInt64(&counter, 1)
}

Мьютексы (пакет sync) — это более общий механизм блокировок, который позволяет защитить критические секции кода. Мьютекс блокирует доступ к ресурсу, пока он не будет освобожден, что предотвращает гонки при сложных операциях.

Пример использования мьютекса:

import (
    "sync"
)

var mu sync.Mutex
var sharedResource int

func safeIncrement() {
    mu.Lock()
    sharedResource++
    mu.Unlock()
}

В общем, атомики подходят для простых операций с примитивными типами, а мьютексы — для более сложных критических секций и структур данных.