Lock locks m.
If the lock is already in use, the calling goroutine
blocks until the mutex is available.
Returns void
tryLock
tryLock(): boolean
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.
Returns boolean
unlock
unlock(): void
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.
Lock locks m. If the lock is already in use, the calling goroutine blocks until the mutex is available.