Senior
Ce sunt Mutex și RWMutex? Cu ce diferă?
sobes.tech AI
Răspuns de la AI
Mutex (în Go — sync.Mutex) este un primitive de sincronizare care asigură accesul exclusiv la o resursă. Când o gorutină preia Mutex-ul, alte gorutine care încearcă să îl preia sunt blocate până când acesta este eliberat.
RWMutex (sync.RWMutex) este o extensie a Mutex-ului care permite împărțirea accesului între citire și scriere. Permite mai multor gorutine să citească date simultan (RLock), dar scrierea (Lock) necesită acces exclusiv și blochează toți cititorii și scriitorii.
Diferențe:
- Mutex blochează pe toți cei care încearcă să obțină accesul în timp ce este ocupat.
- RWMutex permite mai multor cititori să funcționeze în paralel, dar scrierea blochează pe toți.
Exemplu:
var mu sync.RWMutex
var data int
// Citire
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Scriere
mu.Lock()
data = 42
mu.Unlock()