Sobes.tech
Middle

Aký je rozdiel medzi RW Mutex a bežným mutexom?

sobes.tech AI

Odpoveď od AI

sync.RWMutex umožňuje viacerým gorutinám súčasne čítať dáta, ale iba jednej gorutine zapisovať dáta. sync.Mutex blokuje prístup pre akúkoľvek inú gorutinu, ktorá sa pokúsi získať zámok (či už na čítanie alebo zápis), kým prvá gorutina neuvoľní zámok.

  • sync.Mutex: Exkluzívny zámok. Buď je zámok aktívny, alebo nie. Iba jedna gorutina môže držať mutex v danom momente. Vhodné, keď operácie čítania a zápisu sú časté alebo majú podobnú dobu trvania.

    // Príklad použitia Mutex
    var mu sync.Mutex
    var counter int
    
    func increment() {
        mu.Lock()
        counter++
        mu.Unlock()
    }
    
  • sync.RWMutex: Zámok pre čítanie a zápis. Umožňuje viacerým gorutinám držať zámok pre čítanie súčasne, ale zámok pre zápis je exkluzívny. Gorutina, ktorá drží zámok pre zápis, blokuje akékoľvek iné zápisy aj čítania. Gorutiny držace zámok pre čítanie blokujú zápisy, ale nie iné čítania. Vhodné, keď operácie čítania sú výrazne častejšie než operácie zápisu.

    // Príklad použitia RWMutex
    var rwmu sync.RWMutex
    var data map[string]string = make(map[string]string)
    
    func readData(key string) string {
        rwmu.RLock() // Získanie zámku pre čítanie
        value := data[key]
        rwmu.RUnlock() // Uvoľnenie zámku pre čítanie
        return value
    }
    
    func writeData(key, value string) {
        rwmu.Lock() // Získanie zámku pre zápis
        data[key] = value
        rwmu.Unlock() // Uvoľnenie zámku pre zápis
    }
    

Hlavné rozdiely možno zhrnúť v tabuľke:

Charakteristika sync.Mutex sync.RWMutex
Typ zámku Exkluzívny (čítanie/zápis) Zdieľaný (čítanie) + exkluzívny (zápis)
Súčasný prístup Jedna gorutina Viac gorutín pre čítanie, jedna pre zápis
Metóda zámku pre čítanie Lock() RLock()
Metóda zámku pre zápis Lock() Lock()
Metóda odomknutia pre čítanie Unlock() RUnlock()
Metóda odomknutia pre zápis Unlock() Unlock()
Výkon Jednoduchšie, potenciálne pomalšie pri častom čítaní Zložitejšie, potenciálne rýchlejšie pri častom čítaní a zriedkavom zápise