Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от 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
}