Sobes.tech
Junior — Middle

Vysvětlete, co je Read-Write zámek (RWMutex) a jak se používá k řízení přístupu k datům.

sobes.tech AI

Odpověď od AI

Zámek čtení-zápisů (RWMutex) v Go je mechanismus synchronizace, který umožňuje více gorutinám současně číst data, zatímco zajišťuje exkluzivní přístup při zápisu.

  • RLock() / RUnlock() — zámek pro čtení. Více gorutin může tento zámek držet současně.
  • Lock() / Unlock() — zámek pro zápis. Pouze jedna gorutina jej může držet, a během této doby nejsou povoleny žádné čtení.

Toto zvyšuje výkon, když je mnoho čtecích operací a zápisy jsou vzácné.

Příklad použití:

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
}

V tomto příkladu může více gorutin volat readData() současně, ale pokud je volána writeData(), blokuje všechny čtení a zápisy do jejího dokončení.