https://www.cnblogs.com/lidabo/archive/2014/06/20/3798894.html
Thread.interrupt()的理解 https://www.cnblogs.com/zhumengke/articles/13555287.html
线程中断目标:一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。Thread.interrupt 的作用其实也不是中断线程,而是「通知线程应该中断」
结束线程:调用thread对象的interrupt函数.thread对象会记录interrupt请求,当一个thread运行至interruption point时,如果发现有这样的请求,那么thread就会结束
中断
一个正在运行的线程可以通过调用相应的boost::thread对象的interrupt()成员函数来中断。
当被中断的线程在下次执行一个指定的中断点(或者如果它在同时执行一个的时候被锁)并开启中断时,在被中断的线程中就会抛出一个boost::thread_interrupted异常。如果没有被捕获,这会导致结束被中断线程的执行。与其他异常一样,栈就会被释放,自动存储期对象的析构体将会被执行。
如果一个线程需要避免被中断,可以创建一个boost::this_thread::disable_interruption实例。这个类的对象在构造体创建线程的时候禁止了中断,可以在析构体调用之前的任意地方恢复允许中断。
disable_interruption实例的作用域:
void f()
{
// interruption enabled here
{
boost::this_thread::disable_interruption di;
// interruption disabled
{
boost::this_thread::disable_interruption di2;
// interruption still disabled
} // di2 destroyed, interruption state restored
// interruption still disabled
} // di destroyed, interruption state restored
// interruption now enabled
}
通过构造一个boost::this_thread::restore_interruption实例可以临时转换一个boost::this_thread::disable_interruption实例造成的影响,只要在有问题的地方传递一个boost::this_thread::disable_interruption对象。在boost::this_thread::restore_interruption对象被破坏之前,会重新恢复到boost::this_thread_diable_interruption对象被构造前的状态。
restore_interruption实例和disable_interruption实例作用域:
void g()
{
// interruption enabled here
{
boost::this_thread::disable_interruption di;
// interruption disabled
{
boost::this_thread::restore_interruption ri(di);
// interruption now enabled
} // ri destroyed, interruption disable again
} // di destroyed, interruption state restored
// interruption now enabled
}
我们可以通过调用boost::this_thread::interruption_enabled()来查询中断的状态。
预定义的中断点:
以下函数当允许中断时可能会抛出boost::thread_interrupted异常。
boost::thread::join()
boost::thread::timed_join()
boost::condition_variable::wait()
boost::condition_variable::timed_wait()
boost::condition_variable_any::wait()
boost::condition_variable_any::timed_wait()
boost::thread::sleep()
boost::this_thread::sleep()
boost::this_thread::interruption_point()
216

被折叠的 条评论
为什么被折叠?



