Boost 中的工作线程和中断线程协调
Worker and interrupter thread coordination in Boost
这里有一些 C++ 和更多的 Boost 菜鸟。
基于这个 example,我已经成功创建了两个线程,一个 Worker 和一个 Interrupter。后者通过 this_thread::sleep_for 休眠 50 秒,如果 Worker 在这段时间内没有完成,则中断 Worker,正确使用 while !this_thread::interruption_requested() 和 thread::interrupt()。所以这是一个非常好的和简单的超时机制。我的问题是如何更快地停止 Interrupter 睡眠?我的意思是,如果 Worker 在那 50 秒之前完成,我会执行 this_thread::yield 或 this_thread::interruption_requested (两者似乎都有效)但 Interrupter 仍在睡觉并且必须为他等待 50 秒醒来:(
有什么办法可以实现这个超时机制,但是如果Worker在sleep结束前就完成了他的工作,要notify/wake up Interrupter?
PS:完成所有操作后是否需要某种同步?
您的中断线程不应无条件休眠 50 秒,而应等待条件变量 50 秒,如果工作线程提前完成,它将向条件变量发出信号,中断器将唤醒。您可以使用 std::conditional_variable 或来自 boost 的同名
这里有一些 C++ 和更多的 Boost 菜鸟。 基于这个 example,我已经成功创建了两个线程,一个 Worker 和一个 Interrupter。后者通过 this_thread::sleep_for 休眠 50 秒,如果 Worker 在这段时间内没有完成,则中断 Worker,正确使用 while !this_thread::interruption_requested() 和 thread::interrupt()。所以这是一个非常好的和简单的超时机制。我的问题是如何更快地停止 Interrupter 睡眠?我的意思是,如果 Worker 在那 50 秒之前完成,我会执行 this_thread::yield 或 this_thread::interruption_requested (两者似乎都有效)但 Interrupter 仍在睡觉并且必须为他等待 50 秒醒来:(
有什么办法可以实现这个超时机制,但是如果Worker在sleep结束前就完成了他的工作,要notify/wake up Interrupter?
PS:完成所有操作后是否需要某种同步?
您的中断线程不应无条件休眠 50 秒,而应等待条件变量 50 秒,如果工作线程提前完成,它将向条件变量发出信号,中断器将唤醒。您可以使用 std::conditional_variable 或来自 boost 的同名