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++ Boost:等待工作线程等待条件变量 处境_C++_Multithreading_Boost - Fatal编程技术网

C++ Boost:等待工作线程等待条件变量 处境

C++ Boost:等待工作线程等待条件变量 处境,c++,multithreading,boost,C++,Multithreading,Boost,我有一个工作线程,它被一个条件变量触发来做一些工作。基本上,它工作得很好,就像人们想象的那样 问题 但是有一个问题:启动工作线程的线程可能会获得足够长的时间片,以便在工作线程尚未准备好时(即尚未到达条件变量.wait()行时)向数据队列提供数据并通知条件变量 是否有任何方法可以等待工作线程,直到第一次调用wait(),这样就可以保证在我通知工作线程时处理工作?没有理由这样做。当工作线程准备就绪时,它将完成工作。它不需要由条件变量触发,因为它永远不会等待 等待已经发生的事情是一个编码错误。如果你曾

我有一个工作线程,它被一个
条件变量
触发来做一些工作。基本上,它工作得很好,就像人们想象的那样

问题 但是有一个问题:启动工作线程的线程可能会获得足够长的时间片,以便在工作线程尚未准备好时(即尚未到达
条件变量.wait()
行时)向数据队列提供数据并通知
条件变量


是否有任何方法可以等待工作线程,直到第一次调用
wait()
,这样就可以保证在我通知工作线程时处理工作?

没有理由这样做。当工作线程准备就绪时,它将完成工作。它不需要由条件变量触发,因为它永远不会等待

等待已经发生的事情是一个编码错误。如果你曾经想过这样做,你根本不了解条件变量


在线程等待条件变量之前,它必须确保有需要等待的内容。该对象必须由与条件变量关联的互斥对象保护。当线程从条件变量wait返回时,它通常必须重新测试以确定是否需要再次等待。

我明白了,但这不是它通常的设计方式吗?例如,启动X个等待工作的工人,并在工作到达时进行处理?关于你的解释,我不应该让任何工人在有工作之前启动,然后启动他们,对吗?你可以随时启动工人。两件事中的一件会发生:1)工人启动时没有工作,在这种情况下,应该等待工作。2) 当工作人员启动时,将有工作,因此不应等待工作。(不要等待已经发生的事情。在阻止条件变量之前,确保需要在互斥锁的保护下等待。)