线程安全终止

线程安全终止

取消一个线程的方式是向其发送pthread_cancel信号。目标线程接收到这个信号之后会采取动作,具体的动作取决于线程开始时以下几个函数的设定:

1)Int pthread_setcancelstate(int state,int * oldstate);

 这个函数用来设定本线程对cancel信号反应,state有两种值:PTHREAD_CANCEL_ENABLE。分别表示收到信号设置为CANCEL状态和忽略CANCEL信号继续运行。

2)int pthread_setcanceltype(int type,int * oldtype);

设置本线程取消时机,type取两种值:PTHREAD_CANCEL_DEFFEREDPTHREAD_CANCEL_ASYCHRONOUS,分别表示先设置一个cancel状态再运行到下一个取消点的时候取消或者立即执行取消动作,当cancel状态为enable的时候有效。

 

使用void pthread_testcancel(void)可以设置一个取消点。只有当线程取消功能处于启用状态且取消状态设置为延迟状态时,pthread_testcancel()函数有效

 

当然,这不可避免的设计到资源释放的问题,资源释放可以用到以下几个函数:

Void pthread_cleanup_push(void (* routine)(void *),void * arg);

Void pthread_cleanup_pop(int execute);

这几个函数用来做资源释放,对于运行在两个函数之间的代码被终止(pthread_exit或者取消点),将执行pthread_cleanup_push()中所指定的清理函数。





posted @ 2015-12-13 21:24  DChipNau  阅读(192)  评论(0编辑  收藏  举报