C++ Boost:等待工作线程等待条件变量 处境
我有一个工作线程,它被一个C++ Boost:等待工作线程等待条件变量 处境,c++,multithreading,boost,C++,Multithreading,Boost,我有一个工作线程,它被一个条件变量触发来做一些工作。基本上,它工作得很好,就像人们想象的那样 问题 但是有一个问题:启动工作线程的线程可能会获得足够长的时间片,以便在工作线程尚未准备好时(即尚未到达条件变量.wait()行时)向数据队列提供数据并通知条件变量 是否有任何方法可以等待工作线程,直到第一次调用wait(),这样就可以保证在我通知工作线程时处理工作?没有理由这样做。当工作线程准备就绪时,它将完成工作。它不需要由条件变量触发,因为它永远不会等待 等待已经发生的事情是一个编码错误。如果你曾
条件变量
触发来做一些工作。基本上,它工作得很好,就像人们想象的那样
问题
但是有一个问题:启动工作线程的线程可能会获得足够长的时间片,以便在工作线程尚未准备好时(即尚未到达条件变量.wait()
行时)向数据队列提供数据并通知条件变量
是否有任何方法可以等待工作线程,直到第一次调用wait()
,这样就可以保证在我通知工作线程时处理工作?没有理由这样做。当工作线程准备就绪时,它将完成工作。它不需要由条件变量触发,因为它永远不会等待
等待已经发生的事情是一个编码错误。如果你曾经想过这样做,你根本不了解条件变量
在线程等待条件变量之前,它必须确保有需要等待的内容。该对象必须由与条件变量关联的互斥对象保护。当线程从条件变量wait返回时,它通常必须重新测试以确定是否需要再次等待。我明白了,但这不是它通常的设计方式吗?例如,启动X个等待工作的工人,并在工作到达时进行处理?关于你的解释,我不应该让任何工人在有工作之前启动,然后启动他们,对吗?你可以随时启动工人。两件事中的一件会发生:1)工人启动时没有工作,在这种情况下,应该等待工作。2) 当工作人员启动时,将有工作,因此不应等待工作。(不要等待已经发生的事情。在阻止条件变量之前,确保需要在互斥锁的保护下等待。)