Junior — Middle
Mi a különbség a standard mutex használata és egy olvasási és írási lehetőséggel rendelkező (RWMutex) mutex használata között?
sobes.tech MI
Válasz az MI-től
A szokásos mutex (sync.Mutex) a Go-ban kizárólagos hozzáférést biztosít egy erőforráshoz: minden pillanatban csak egy goroutine szerezheti meg a mutexet, a többi vár.
Az olvasási és írási lehetőséggel rendelkező (sync.RWMutex) mutex lehetővé teszi:
- Több goroutine egyidejűleg szerezheti meg a mutexet olvasásra (RLock), ha nincs író.
- Csak egy goroutine szerezheti meg a mutexet írásra (Lock), ezzel blokkolva minden olvasót és más írókat.
Ez növeli a teljesítményt olyan forgatókönyvekben, ahol az olvasási műveletek sokkal gyakoribbak, mint az írások, mivel az olvasások nem blokkolják egymást.
Példa:
var mu sync.RWMutex
var data int
// Olvasás
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Írás
mu.Lock()
data = 42
mu.Unlock()
Ha egy normál Mutex-t használunk, akkor még az olvasások is blokkolják egymást, ami csökkenti a párhuzamosságot.