44 lines
790 B
Go
44 lines
790 B
Go
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()
|
|
}
|
|
}
|