deadlock.go
func (m *RWMutex) Unlock() {
	m.mu.Unlock()
	if !Opts.Disable {
		postUnlock(m)
	}
}
func (m *RWMutex) Unlock() {
	m.mu.Unlock()
	if !Opts.Disable {
		postUnlock(m)
	}
}
func ( m * RWMutex ) Unlock ( ) { m . mu . Unlock ( ) if ! Opts . Disable { postUnlock ( m ) } }
// Unlock unlocks the mutex for writing.  It is a run-time error if rw is
// not locked for writing on entry to Unlock.
//
// As with Mutexes, a locked RWMutex is not associated with a particular
// goroutine.  One goroutine may RLock (Lock) an RWMutex and then
// arrange for another goroutine to RUnlock (Unlock) it.
Unlock unlocks the mutex for writing . It is a run - time error if rw is not locked for writing on entry to Unlock . As with Mutexes a locked RWMutex is not associated with a particular goroutine . One goroutine may RLock ( Lock ) an RWMutex and then arrange for another goroutine to RUnlock ( Unlock ) it .