mutex and waits until this is signalled.
When this function returns,
mutex is locked again and owned by the calling thread.
When using condition variables, it is possible that a spurious wakeup may occur (ie: wait returns even though
@signal was not called). It's also possible that a stolen wakeup may occur. This
is when @signal is called, but another thread acquires
this thread and modifies the state of the program in such a way that when wait is able to return, the expected
condition is no longer met.
For this reason, wait must always be used in a loop. See the documentation for Cond for a complete example.
a Mutex that is currently locked