// Provided by runtime via linkname. func throw(string) func fatal(string) type Mutex … type Locker … const mutexLocked … const mutexWoken … const mutexStarving … const mutexWaiterShift … const starvationThresholdNs … // Lock locks m. // If the lock is already in use, the calling goroutine // blocks until the mutex is available. func (m *Mutex) Lock() { … } // TryLock tries to lock m and reports whether it succeeded. // // Note that while correct uses of TryLock do exist, they are rare, // and use of TryLock is often a sign of a deeper problem // in a particular use of mutexes. func (m *Mutex) TryLock() bool { … } func (m *Mutex) lockSlow() { … } // Unlock unlocks m. // It is a run-time error if m is not locked on entry to Unlock. // // A locked [Mutex] is not associated with a particular goroutine. // It is allowed for one goroutine to lock a Mutex and then // arrange for another goroutine to unlock it. func (m *Mutex) Unlock() { … } func (m *Mutex) unlockSlow(new int32) { … }