zthread学习 实例九 任务终止(二)——中断方式
来源:互联网 发布:js函数有返回值吗 编辑:程序博客网 时间:2024/05/17 23:42
引起线程变为阻塞状态的原因有:
1、调用了sleep(),线程进入休眠状态。
2、调用了wait(),挂起了线程的运行。
3、线程正在等待某个I/0操作完成(此时中断是不会出现的)。
4、线程在尝试进入一段被一个互斥锁保护的代码块,而那个互斥锁已经被其他线程获得。
终止一个阻塞线程和终止一个非阻塞线程的方式有很大的不同。
终止一个阻塞线程 通常 的做法是,首先唤醒它,然后按终止一个非阻塞线程的方式来终止,但这样线程会多执行了一些代码。
有时需要在某个线程处于阻塞状态时 立即 终止它。ZThread库使用抛异常的方式来解决立即终止 阻塞 线程。因为从被阻塞的任务中离开时,可能需要销毁与之相关的对象并清理有关资源,正因为这样在run()中间跳出更像是抛出一个异常。在run()函数包含try模块,在响应异常的catch语句中清理有关资源。
interrupt()函数用来给线程设置中断状态,一个使用了中断状态设置的线程,如果已经被阻塞或尝试进行阻塞时将会抛出一个Interrupted_Exception异常。当异常被抛出或调用了intertupted()时,中断状态重新被设置。
中断状态可以通过调用interrupt()进行设置。调用interrupted()来检查中断状态(不仅能告知interrupt()是否被调用,还会清除当前的中断状态,以确保不会两次通知正被中断的任务),interrupted()会用一个Interrupted_Exception异常来通知一个已经阻塞的线程,或用一个成功的返回值来通知一个非阻塞的线程。下面例子显示了当设置中断状态时,run()函数中处理阻塞和非阻塞两种可能性的情况:
为了保证不因退出而出现不一致的状态,所有资源获取都应封装在基于栈的对象中,以便无论run()如何退出,对象的析构都会被调用。
- zthread学习 实例九 任务终止(二)——中断方式
- zthread学习 实例九 任务终止(二)——中断方式
- zthread学习 实例八 任务终止(一)——观赏植物园
- zthread学习 实例八 任务终止(一)——观赏植物园
- zthread学习 实例二
- zthread学习 实例十 线程间的协助(二)
- zthread学习 实例十一 线程间的协助(二)
- zthread学习 实例五 非任务对象的生存期
- zthread学习 实例五 非任务对象的生存期
- zthread学习 实例十 线程间的协助(三)——死锁
- zthread学习 实例十 线程间的协助(四)——读者、写者
- zthread学习 实例十二 线程间的协助(三)——死锁
- zthread学习 实例十三 线程间的协助(四)——读者、写者
- zthread学习 实例一
- zThread学习 二
- 中断详解(二)——中断描述符、任务门、中断门、陷阱门
- zthread学习 实例十 线程间的协助(一)
- zthread学习 实例十 线程间的协助(一)
- 关于SCI、SSCI、EI、ASPT来源刊、CJFD收录期刊
- Oracle 误删数据库表空间文件后的恢复
- 欧拉回路,poj 1041
- 拷贝构造函数总结
- 生活如此··
- zthread学习 实例九 任务终止(二)——中断方式
- Android帮助文档翻译——开发指南(三)任务和Back Stack
- 其它
- php editplus 使用
- Windows 64bit 平台使用 regsvr32 注册驱动动态库问题
- 老鼠与毒药问题
- Linux 软件安装使用(10)终端音乐播放器cmus
- SQL 行列转置
- 爱与被爱