Senior
Ի՞նչ են Mutex և RWMutex-ը: Ինչո՞վ են տարբերվում։
sobes.tech AI
Պատասխան AI-ից
Go-ում (sync.Mutex) — սա սինխրոնիզացիայի primitive է, որը ապահովում է ռեսուրսի բացառիկ մուտք։ Երբ մի goroutine գրավում է Mutex-ը, մյուս goroutine-երը, որոնք փորձում են դա անել, բլոկվում են մինչև այն ազատվելը։
RWMutex (sync.RWMutex) — սա Mutex-ի ընդլայնումն է, որը թույլ է տալիս բաժանել մուտքը ընթերցման և գրելու համար։ Դա թույլ է տալիս միաժամանակ մի քանի goroutine-երին ընթերցել տվյալները (RLock), բայց գրելը (Lock) պահանջում է բացառիկ մուտք և բլոկում է բոլոր ընթերցողներին և գրողներին։
Տարբերություններ՝
- Mutex բլոկում է բոլորին, ովքեր փորձում են մուտք գործել, մինչ այն զբաղված է։
- RWMutex թույլ է տալիս միաժամանակ մի քանի ընթերցողներին աշխատել, բայց գրելը բլոկում է բոլորին։
Օրինակ՝
var mu sync.RWMutex
var data int
// Ուղղում
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Գրառում
mu.Lock()
data = 42
mu.Unlock()