Sobes.tech
Middle

Kuo skiriasi RW Mutex nuo įprasto mutex?

sobes.tech AI

Atsakymas iš AI

sync.RWMutex leidžia kelioms gorutinoms vienu metu skaityti duomenis, tačiau tik viena gorutina gali rašyti duomenis. sync.Mutex blokuoja prieigą bet kuriai kitai gorutinai, kuri bando gauti užraktą (nesvarbu ar skaityti ar rašyti), kol pirmoji gorutina neužleis užrakto.

  • sync.Mutex: Išskirtinis užraktas. Ar užrakintas, ar ne. Tik viena gorutina gali laikyti mutex vienu metu. Tinka, kai skaitymo ir rašymo operacijos dažnos arba trunka panašiai.

    // Pavyzdys naudojant Mutex
    var mu sync.Mutex
    var counter int
    
    func increment() {
        mu.Lock()
        counter++
        mu.Unlock()
    }
    
  • sync.RWMutex: Skaitymo ir rašymo užraktas. Leidžia kelioms gorutinoms vienu metu skaityti duomenis, tačiau rašymo užraktas yra išskirtinis. Gorutina, turinti rašymo užraktą, blokuoja kitus rašymo ir skaitymo veiksmus. Gorutinos, turinčios skaitymo užraktą, blokuoja rašymo veiksmus, bet ne kitus skaitymo. Tinka, kai skaitymo operacijos yra žymiai dažnesnės nei rašymo.

    // Pavyzdys naudojant RWMutex
    var rwmu sync.RWMutex
    var data map[string]string = make(map[string]string)
    
    func readData(key string) string {
        rwmu.RLock() // Gauti skaitymo užraktą
        value := data[key]
        rwmu.RUnlock() // Atlaisvinti skaitymo užraktą
        return value
    }
    
    func writeData(key, value string) {
        rwmu.Lock() // Gauti rašymo užraktą
        data[key] = value
        rwmu.Unlock() // Atlaisvinti rašymo užraktą
    }
    

Pagrindiniai skirtumai gali būti apibendrinti lentelėje:

Savybė sync.Mutex sync.RWMutex
Užrakto tipas Išskirtinis (skaitymas/rašymas) Bendras (skaitymas) + išskirtinis (rašymas)
Vienu metu prieiga Viena gorutina Daug gorutinų skaitymui, viena rašymui
Užrakto metodas skaitymui Lock() RLock()
Užrakto metodas rašymui Lock() Lock()
Atlaisvinimo metodas skaitymui Unlock() RUnlock()
Atlaisvinimo metodas rašymui Unlock() Unlock()
Našumas Paprastas, galimai lėtesnis dažnam skaitymui Sudėtingesnis, galimai greitesnis dažnam skaitymui ir retam rašymui