Locks this mutex, suspending caller while the mutex is locked.
This suspending function is cancellable. If the Job of the current coroutine is cancelled or completed while this function is suspended, this function immediately resumes with CancellationException. There is a prompt cancellation guarantee. If the job was cancelled while this function was suspended, it will not resume successfully. See suspendCancellableCoroutine documentation for low-level details. This function releases the lock if it was already acquired by this function before the CancellationException was thrown.
This function is fair; suspended callers are resumed in first-in-first-out order.