Тип sync.RWMutex
Тип данных sync.RWMutex является улучшенной версией sync.Mutex и определяется в файле rwmutex.go каталога sync стандартной библиотеки Go следующим образом:
type RWMutex struct {
w Mutex
writerSem uint32
readerSem uint32
readerCount int32
readerWait int32
}
Другими словами, sync.RWMutex основан на sync.Mutex и имеет необходимые дополнения и улучшения. Вы можете спросить, а как sync.RWMutex улучшает sync.Mutex? Хотя одной функции разрешено выполнять операции записи с мьютексом sync.RWMutex, у вас может быть несколько считывателей, владеющих мьютексом sync.RWMutex. Это означает, что операции чтения с помощью sync.RWMutex обычно выполняются быстрее. Тем не менее есть одна важная деталь, о которой следует знать: пока все считыватели мьютекса sync.RWMutex не разблокируют его, вы не сможете заблокировать его для записи. Такова небольшая цена, которую нам придется платить за повышение производительности‚ получаемое за счет возможности иметь несколько считывателей.