0%

线程条件变量

线程条件变量与互斥锁不同,条件变量是用来等待而不是用来上锁的。
条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。

Linux系统编程-多线程同步条件变量

pthread_cond_wait

pthread_cond_wait 用于阻塞当前线程,等待别的线程使用 pthread_cond_signalpthread_cond_broadcast 来唤醒它。 pthread_cond_wait 必须与 pthread_mutex 配套使用。
pthread_cond_wait 一进入 wait 状态 就会 自动 release mutex。当其他线程通过 pthread_cond_signalpthread_cond_broadcast,把该线程唤醒,使 pthread_cond_wait 返回时,该线程又 自动获得该 mutex

pthread_cond_signal

pthread_cond_signal 函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行. 如果没有线程处在阻塞等待状态, pthread_cond_signal 也会成功返回。
假如有多个线程正在阻塞等待着这个条件变量的话,那么是根据各等待线程优先级的高低确定哪个线程接收到信号开始继续执行。如果各线程优先级相同,则根据等待时间的长短来确定哪个线程获得信号。但无论如何一个 pthread_cond_signal 最多发信一次。

pthread_cond_broadcast

pthread_cond_broadcast 唤醒全部线程

Ref

  1. 通用线程:POSIX 线程详解,第 3 部分