Sobes.tech
Junior — Middle

Каква е разликата между използването на стандартен мьютекс и мьютекс с възможност за четене и писане (RWMutex)?

sobes.tech AI

Отговор от AI

Стандартният mutex (sync.Mutex) в Go осигурява ексклузивен достъп до ресурс: във всеки момент само една горутина може да го придобие, останалите чакат.

Mutex с възможност за четене и писане (sync.RWMutex) позволява:

  • Няколко горутини могат едновременно да придобият mutex за четене (RLock), ако няма писател.
  • Само една горутина може да придобие mutex за писане (Lock), като блокира всички читатели и други писатели.

Това увеличава производителността в сценарии, където операциите за четене са много по-чести от писането, тъй като четенето не блокира другите.

Пример:

var mu sync.RWMutex
var data int

// Четене
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Писане
mu.Lock()
data = 42
mu.Unlock()

Ако използвате обикновен Mutex, дори и четенето ще блокира другите, което намалява паралелизма.