Sobes.tech
Назад к вопросам
Junior — Middle
84

Какие типы взаимных исключений (Mutex) реализованы в стандартной библиотеке Go?

Компании, где спрашивали
WildberriesWildberries
Indrive
Киберпротект

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

sobes.tech AI

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

Кроме того, есть sync.RWMutex — расширенный вариант мьютекса, который позволяет нескольким читателям одновременно держать блокировку, но запись блокируется эксклюзивно.

Пример использования sync.Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

И пример с sync.RWMutex:

var rwMu sync.RWMutex
var data int

func readData() int {
    rwMu.RLock()
    defer rwMu.RUnlock()
    return data
}

func writeData(val int) {
    rwMu.Lock()
    defer rwMu.Unlock()
    data = val
}