Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么要实现条件变量?_C_Multithreading_Unix - Fatal编程技术网

C 为什么要实现条件变量?

C 为什么要实现条件变量?,c,multithreading,unix,C,Multithreading,Unix,我需要帮助理解条件变量的机制 我知道它使用的功能有:等待、时间等待、信号、广播 当调用“wait”或“timedwait”函数时,当前线程的ID将附加到变量中。然后,在无限循环中,检查某个事件(或时间间隔的结束) “信号”和“广播”函数从写在变量中的恢复线程(一个或多个)发送信号 大致上,条件变量是一个结构: struct cond_var{ int thread_id[]; }; 希望我是对的。是的,(所谓的)“条件变量”本质上是一个暂停线程队列 是的,如果有任何挂起的线程,“信号”

我需要帮助理解条件变量的机制

我知道它使用的功能有:等待、时间等待、信号、广播

当调用“wait”或“timedwait”函数时,当前线程的ID将附加到变量中。然后,在无限循环中,检查某个事件(或时间间隔的结束)

“信号”和“广播”函数从写在变量中的恢复线程(一个或多个)发送信号

大致上,条件变量是一个结构:

struct cond_var{
    int thread_id[];
};
希望我是对的。

是的,(所谓的)“条件变量”本质上是一个暂停线程队列

是的,如果有任何挂起的线程,“信号”将重新启动其中一个或多个线程,“广播”将启动所有线程。如果没有挂起的线程,“信号”和“广播”无效

是的,没有其他状态与“条件变量”关联。

是的,(所谓的)“条件变量”本质上是一个挂起线程队列

是的,如果有任何挂起的线程,“信号”将重新启动其中一个或多个线程,“广播”将启动所有线程。如果没有挂起的线程,“信号”和“广播”无效

是,没有与“条件变量”关联的其他状态

为什么

从应用程序程序员的p.O.V.来看,条件变量是操作系统提供的一种低级原始机制,可用于构造许多不同的高级同步对象

  • 如果要实现阻塞队列,可以使用一个条件变量在队列变为非空时通知使用者,也可以使用另一个条件变量在队列变为非满时通知生产者

  • 如果您正在实现一个信号量,那么可以使用一个条件变量在许可证被释放时通知等待的线程

  • 如果要实现某种屏障,可以使用条件变量通知等待的线程屏障已“打开”

  • 等等

为什么

从应用程序程序员的p.O.V.来看,条件变量是操作系统提供的一种低级原始机制,可用于构造许多不同的高级同步对象

  • 如果要实现阻塞队列,可以使用一个条件变量在队列变为非空时通知使用者,也可以使用另一个条件变量在队列变为非满时通知生产者

  • 如果您正在实现一个信号量,那么可以使用一个条件变量在许可证被释放时通知等待的线程

  • 如果要实现某种屏障,可以使用条件变量通知等待的线程屏障已“打开”

  • 等等


你能澄清你的问题是什么吗?我不确定你是在说还是在问。如果可能的话,请发表你的帖子而不是回复评论。你能澄清你的问题是什么吗?我不确定你是在说还是在问。如果可能的话,请发表你的帖子,而不是回复评论。