| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package sync
- import "sync"
- // This RWMutex's RLock and RUnlock methods don't allow shared reading because
- // there's no way to determine what goroutine has stopped holding the read
- // lock when RUnlock is called. So for debugging purposes when the package is
- // Enable()d, it's just like Mutex.
- type RWMutex struct {
- ins Mutex // Instrumented
- rw sync.RWMutex // Real McCoy
- }
- func (me *RWMutex) Lock() {
- if noSharedLocking {
- me.ins.Lock()
- } else {
- me.rw.Lock()
- }
- }
- func (me *RWMutex) Unlock() {
- if noSharedLocking {
- me.ins.Unlock()
- } else {
- me.rw.Unlock()
- }
- }
- func (me *RWMutex) RLock() {
- if noSharedLocking {
- me.ins.Lock()
- } else {
- me.rw.RLock()
- }
- }
- func (me *RWMutex) RUnlock() {
- if noSharedLocking {
- me.ins.Unlock()
- } else {
- me.rw.RUnlock()
- }
- }
|