如何让空闲线程再次被激活,以便恢复其上下文并继续执行(例如,如果我希望线程在 10 秒后激活,然后每 5 秒激活一次,同时其他线程可能会继续运行)?
3 回答
你不能让线程休眠所需的时间吗?上下文本质上是线程的一部分,所以会自动恢复。
根据您使用的线程 API,应该有在线程之间发送的信号形式以及等待此类信号的方法。
基于此,当一个线程完成时,你让它等待一个信号(实际上是在睡觉并且不使用任何 CPU)。然后,其他一些线程可以将工作项存储在某个地方,并向睡眠线程发出信号以唤醒。唤醒线程检查是否有可用的工作项,处理该工作项,然后返回等待下一个项目发出信号。
这是该方法的一个非常简化的版本。(对于初学者来说,如果下一个工作项在前一个工作项完成之前存储怎么办?)确切的实现很大程度上取决于您使用的 API。尝试为该 API 找到一些消费者 - 生产者场景,这应该会给你足够的输入来咀嚼。
如何让空闲线程再次被激活,以便恢复其上下文并继续执行(例如,如果我希望线程在 10 秒后激活,然后每 5 秒激活一次,同时其他线程可能会继续运行)?
这取决于您的线程模型:您使用的是 Windows 线程吗?提升线程?线程?XPCOM线程?别的东西?
在 Windows 中,您可以暂停线程并再次激活它们。
在 boost/pthreads 中,您必须:
每五秒启动一个线程,然后让它运行并终止(并在五秒后启动另一个)
或者让它已经运行,或者从外部告诉它“你现在处于活动状态”(例如通过调用计时器上的函数)
或者让它休眠五秒钟,然后处理,然后再次休眠
从我在实践中看到的情况来看,第二和第三个选项是最常见的选项。第一个有点浪费,因为创建线程可能有点贵(取决于您的平台)。
你想做什么?