Takes the locked variable var, unlocks it, and blocks until another
thread does a cond_signal or
cond_broadcast for that variable. The variable is
relocked after the cond_wait has been satisfied. If multiple
threads are cond_waiting, all but one will reblock waiting to
reacquire the lock.