Sobes.tech
Junior — Middle

Обяснете какво е Read-Write блокировка (RWMutex) и как се използва за управление на достъпа до данни.

sobes.tech AI

Отговор от AI

Блокировката за четене-запис (RWMutex) в Go е механизъм за синхронизация, който позволява на няколко горутини да четат данни едновременно, като същевременно гарантира изключителен достъп при писане.

  • RLock() / RUnlock() — блокировка за четене. Множество горутини могат да държат тази блокировка едновременно.
  • Lock() / Unlock() — блокировка за писане. Само една горутина може да я държи, и по време на това не са разрешени четения.

Това увеличава производителността, когато има много операции за четене и редки записи.

Пример за използване:

var rwMutex sync.RWMutex
var data int

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

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

В този пример, няколко горутини могат да извикват readData() едновременно, но ако се извика writeData(), тя блокира всички четения и писания до нейното завършване.