线程中断

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()

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值