摘要: 线程取消的方法是向目标线程发Cancel信号,但如何处理Cancel信号则由目标线程自己决定,或者忽略、或者立即终止、或者继续运行至Cancelation-point(取消点),由不同的Cancelation状态决定。线程接收到CANCEL信号的缺省处理(即pthread_create()创建线程的缺省状态)是继续运行至取消点,也就是说设置一个CANCELED状态,线程继续运行,只有运行至Cancelation-point的时候才会退出。(1)什么是线程取消点根据POSIX标准,pthread_join()、pthread_testcancel()、pthread_cond_wait()、pt 阅读全文
posted @ 2011-08-15 21:15 浪里飞 阅读(2340) 评论(0) 推荐(0) 编辑
摘要: 说明:本文由【2,3】整理而得。这篇文章主要从一个 Linux 下一个 pthread_cancel 函数引起的多线程死锁小例子出发来说明 Linux 系统对 POSIX 线程取消点的实现方式,以及如何避免因此产生的线程死锁。目 录:1. 一个 pthread_cancel 引起的线程死锁小例子2. 取消点(Cancellation Point)3. 取消类型(Cancellation Type)4. Linux 的取消点实现5. 对示例函数进入死锁的解释6. 如何避免因此产生的死锁7. 结论8. 参考文献1. 一个 pthread_cancel 引起的线程死锁小例子下面是一段在Linux 平 阅读全文
posted @ 2011-08-15 20:45 浪里飞 阅读(9094) 评论(2) 推荐(2) 编辑
摘要: 以下内容根据【1】进行整理。关于取消点,将在后面进一步讨论。1、一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。2、线程终止时的清理 不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题。 最经常出现的情形是资源独占锁的使用:线程. 阅读全文
posted @ 2011-08-15 20:42 浪里飞 阅读(5344) 评论(0) 推荐(0) 编辑