Sobes.tech
Junior — Middle

Vysvetlite, čo je Read-Write zámok (RWMutex) a ako sa používajú na riadenie prístupu k údajom.

sobes.tech AI

Odpoveď od AI

Blokovanie čítania-písania (RWMutex) v Go je mechanizmus synchronizácie, ktorý umožňuje viacerým gorutinám súčasne čítať údaje, pričom zabezpečuje exkluzívny prístup počas zápisu.

  • RLock() / RUnlock() — zámok pre čítanie. Viacero gorutín môže tento zámok držať súčasne.
  • Lock() / Unlock() — zámok pre zápis. Len jedna gorutina ho môže držať, a počas toho nie sú povolené žiadne čítania.

Toto zvyšuje výkon, keď je veľa čitateľských operácií a zriedka sa zapisuje.

Príklad použitia:

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 príklade môžu viaceré gorutiny volať readData() súčasne, ale ak sa volá writeData(), blokuje všetky čítania a zápisy do jej dokončenia.