线程条件变量与互斥锁不同,条件变量是用来等待而不是用来上锁的。
条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。
pthread_cond_wait
pthread_cond_wait
用于阻塞当前线程,等待别的线程使用 pthread_cond_signal
或 pthread_cond_broadcast
来唤醒它。 pthread_cond_wait
必须与 pthread_mutex
配套使用。pthread_cond_wait
一进入 wait 状态
就会 自动 release mutex
。当其他线程通过 pthread_cond_signal
或 pthread_cond_broadcast
,把该线程唤醒,使 pthread_cond_wait
返回时,该线程又 自动获得该 mutex
。
pthread_cond_signal
pthread_cond_signal
函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行. 如果没有线程处在阻塞等待状态, pthread_cond_signal
也会成功返回。
假如有多个线程正在阻塞等待着这个条件变量的话,那么是根据各等待线程优先级的高低确定哪个线程接收到信号开始继续执行。如果各线程优先级相同,则根据等待时间的长短来确定哪个线程获得信号。但无论如何一个 pthread_cond_signal
最多发信一次。
pthread_cond_broadcast
pthread_cond_broadcast
唤醒全部线程