取消属性

线程取消的原理: (发信号到,目标线程自决定处理)
向目标线程发”Cancel”信号,但如何处理Cancel信号则由目标线程自己决定.
忽略、或者立即终止、或者继续运行至Cancelation-point取消点. 由不同的Cancelation状态决定。
线程接收到CANCEL信号的缺省处理(pthread_create()创建线程的缺省状态,缺省情况下,将启用取消功能)是继续运行至取消点,线程才会退出.

相关操作:
线程取消函数pthread_cancel只有在”可取消状态”下才可以被调用处理.
可以调用pthread_setcancelstate接口来设置state状态,但是默认情况下程序运行到
取消点才会执行pthread_cancel(“推迟取消类型”),可以调用pthread_setcancelstype接口
来设置取消类型为”异步取消”(此类型,线程可以在任意时间被取消).
在不包含取消点的程序,但有需要线程能响应取消请求,可以调用接口pthread_testcancel 自动创建取消点
来相应取消请求并处理.(线程取消功能处于启用状态且取消状态设置为延迟状态时,pthread_testcancel()函数有效)

取消点:
pthreads标准指定了几个取消点,其中包括:
(1)通过pthread_testcancel调用以编程方式建立线程取消点。
(2)线程等待pthread_cond_wait或pthread_cond_timewait()中的特定条件。
(3)被sigwait(2)阻塞的函数
(4)一些标准的库调用。通常,这些调用包括线程可基于阻塞的函数。

会引起阻塞的系统调用都是Cancelation-point.
关键接口: 强调内容
int pthread_cancel(pthread_t thread)
int pthread_setcancelstate(int state, int *oldstate)
int pthread_setcanceltype(int type, int *oldtype)
void pthread_testcancel(void)

参考:
http://www.cnblogs.com/lijunamneg/archive/2013/01/25/2877211.html

Posix的线程终止有两种情况:正常终止 和 非正常终止。
正常终止:调用pthread_exit()、从线程函数中return都将使线程正常退出,是可预见的退出方式;
非正常终止:在其他线程的干预下、由于自身运行出错(比如访问非法地址)而退出,此退出方式是不可预见的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值