You must pass in a Mutex to the condition variable constructor. This mutex
may be shared by other condition variables, if desired. It is the caller’s
responsibility to ensure the Mutex object does not destruct during the
lifetime of the condition variable.