Sobes.tech
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()