Mutex — exclusive lock. RWMutex — allows multiple readers.
sync.Mutex:
1var mu sync.Mutex23func Read() {4 mu.Lock()5 // Read data6 mu.Unlock()7}89func Write() {10 mu.Lock()11 // Write data12 mu.Unlock()13}
sync.RWMutex:
1var rwmu sync.RWMutex23func Read() {4 rwmu.RLock()5 // Read data — multiple can read6 rwmu.RUnlock()7}89func Write() {10 rwmu.Lock()11 // Write data — exclusive12 rwmu.Unlock()13}
When to use RWMutex: