That isn't true. The mutex might be re-acquired even though the condition no longer holds. This is why all calls to pthread_cond_wait() should be wrapped in a while (not an if!) which tests the condition. Some other thread could intervene and cause the condition to become untrue even though the testing thread has woken up.
Originally Posted by CornedBee
/* Do something to the state... */