Sobes.tech
Middle+

Նորմալ mutex-ը փակո՞ւմ է նաև ընթերցման և գրելու համար։

sobes.tech AI

Պատասխան AI-ից

Обычный mutex (в Go это sync.Mutex) блокирует доступ к ресурсу полностью — и на чтение, и на запись. То есть, когда mutex захвачен, никакие другие горутины не могут ни читать, ни писать защищённые данные.

Если нужна блокировка, которая позволяет нескольким читателям одновременно читать, но блокирует запись, то используют sync.RWMutex. Он имеет методы RLock/RUnlock для чтения и Lock/Unlock для записи.

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

var mu sync.Mutex
var counter int

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

Здесь пока одна горутина держит Lock, другие ждут, даже если им нужно только читать.