dou*_*lep 9 c++ multithreading interrupt c++11
我正在考虑在我的应用程序中使用C++ 0x线程而不是Boost线程.但是,我不确定如何重新实现我对标准C++ 0x线程的重新实现,因为它们似乎没有interrupt()方法.
我目前的设置是:
工人wait()至少要求两个不同的条件变量.师父有一个"超时"状态:在这种情况下,它告诉所有工人停下来并给出他们当时获得的任何结果.使用Boost线程master只是interrupt_all()在线程组上使用,这导致worker停止等待.如果他们现在没有等待,主人还会设置一个bool工人定期检查的标志.
但是,在C++ 0x中,std::thread我没有看到任何替代品interrupt().我错过了什么吗?如果没有,我如何实施上述计划,以便工人不能永远睡觉?
Vic*_*iba 10
不幸的是,我没有看到另一种方式而不是轮询,而不是使用等待使用定时等待和变量来表示中断已经完成.
void th(Interruptor& interruptor) {
try {
...
while (cnd1.timed_wait(d)==false) {
interruptor.check_interruption_point();
}
...
} catch (interrupted_exception &) {}
}
Run Code Online (Sandbox Code Playgroud)
Interruptor类将维护一个使用互斥锁或使用原子操作保护的布尔变量(如果你有它们)和两个函数interrupt和check_interruption_point,如果boolean为true则抛出interrupt_exception.Mater线程将创建一个Interruptor变量,该变量将在创建时提供给相关的线程.主机可以立即中断所有依赖于此中断器的线程.如果要一次显式中断一个线程,您当然可以为每个线程创建一个中断器.
由您决定定时等待的持续时间,因此您的线程能够在程序需要时立即做出反应.
| 归档时间: |
|
| 查看次数: |
7093 次 |
| 最近记录: |