C 为什么要实现条件变量?
我需要帮助理解条件变量的机制 我知道它使用的功能有:等待、时间等待、信号、广播 当调用“wait”或“timedwait”函数时,当前线程的ID将附加到变量中。然后,在无限循环中,检查某个事件(或时间间隔的结束) “信号”和“广播”函数从写在变量中的恢复线程(一个或多个)发送信号 大致上,条件变量是一个结构:C 为什么要实现条件变量?,c,multithreading,unix,C,Multithreading,Unix,我需要帮助理解条件变量的机制 我知道它使用的功能有:等待、时间等待、信号、广播 当调用“wait”或“timedwait”函数时,当前线程的ID将附加到变量中。然后,在无限循环中,检查某个事件(或时间间隔的结束) “信号”和“广播”函数从写在变量中的恢复线程(一个或多个)发送信号 大致上,条件变量是一个结构: struct cond_var{ int thread_id[]; }; 希望我是对的。是的,(所谓的)“条件变量”本质上是一个暂停线程队列 是的,如果有任何挂起的线程,“信号”
struct cond_var{
int thread_id[];
};
希望我是对的。是的,(所谓的)“条件变量”本质上是一个暂停线程队列
是的,如果有任何挂起的线程,“信号”将重新启动其中一个或多个线程,“广播”将启动所有线程。如果没有挂起的线程,“信号”和“广播”无效
是的,没有其他状态与“条件变量”关联。是的,(所谓的)“条件变量”本质上是一个挂起线程队列
是的,如果有任何挂起的线程,“信号”将重新启动其中一个或多个线程,“广播”将启动所有线程。如果没有挂起的线程,“信号”和“广播”无效
是,没有与“条件变量”关联的其他状态
为什么
从应用程序程序员的p.O.V.来看,条件变量是操作系统提供的一种低级原始机制,可用于构造许多不同的高级同步对象
- 如果要实现阻塞队列,可以使用一个条件变量在队列变为非空时通知使用者,也可以使用另一个条件变量在队列变为非满时通知生产者
- 如果您正在实现一个信号量,那么可以使用一个条件变量在许可证被释放时通知等待的线程
- 如果要实现某种屏障,可以使用条件变量通知等待的线程屏障已“打开”
- 等等
- 如果要实现阻塞队列,可以使用一个条件变量在队列变为非空时通知使用者,也可以使用另一个条件变量在队列变为非满时通知生产者
- 如果您正在实现一个信号量,那么可以使用一个条件变量在许可证被释放时通知等待的线程
- 如果要实现某种屏障,可以使用条件变量通知等待的线程屏障已“打开”
- 等等