These two functions are used to unblock threads blocked on a condition
variable.
The pthread_cond_signal() call unblocks at least
one of the threads that are blocked on the specified condition variable cond (if any threads are blocked on cond).
The pthread_cond_broadcast() call unblocks all
threads currently blocked on the specified condition variable cond.
If more than one thread is blocked on a condition variable, the scheduling
policy determines the order in which threads are unblocked. When each thread
unblocked as a result of a pthread_cond_signal() or pthread_cond_broadcast() returns from its call to pthread_cond_wait() or pthread_cond_timedwait(), the thread owns
the mutex with which it called pthread_cond_wait() or pthread_cond_timedwait(). The thread(s) that are unblocked contend
for the mutex according to the scheduling policy (if applicable), and as
if each had called pthread_mutex_lock().
The pthread_cond_signal() or pthread_cond_broadcast() functions may be called by a thread whether or not it currently
owns the mutex that threads calling pthread_cond_wait()
or pthread_cond_timedwait() have associated with the
condition variable during their waits; however, if predictable scheduling
behavior is required, then that mutex is locked by the thread calling pthread_cond_signal() or pthread_cond_broadcast().
The pthread_cond_signal() and pthread_cond_broadcast() functions have no effect if there are no threads currently blocked
on cond.
|