Suppose some condition variable "cond" is associated with a mutex variable "mutex". If a thread is sleeping on cond
after calling pthread_cond_wait(&cond,&mutex)
, and another thread that has mutex
locked is finished, does it matter whether that thread calls pthread_cond_signal(&cond)
before or after calling pthread_mutex_unlock(&mutex)
? Does it even need to unlock the mutex at all if it calls pthread_cond_signal(&cond)
, since the sleeping thread will acquire the mutex anyway?
EDIT: According to https://computing.llnl.gov/tutorials/pthreads/#ConVarOverview, "Failing to unlock the mutex after calling pthread_cond_signal() may not allow a matching pthread_cond_wait() routine to complete (it will remain blocked)." I guess then, unlocking, and perhaps only afterwards, is required.