当前位置: 技术问答>linux和unix
如何杀掉一个线程
来源: 互联网 发布时间:2015-05-04
本文导语: 我在主线程中用pthread_create创建一个线程,但如何在主线程中杀掉它呢?用pthread_exit的话,参数怎么取?谢谢! | int pthread_cancel(pthread_t thread) 发送终止信号给thread线程,如果成功则返回0,否...
我在主线程中用pthread_create创建一个线程,但如何在主线程中杀掉它呢?用pthread_exit的话,参数怎么取?谢谢!
|
int pthread_cancel(pthread_t thread)
发送终止信号给thread线程,如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。
int pthread_setcancelstate(int state, int *oldstate)
设置本线程对Cancel信号的反应,state有两种值:PTHREAD_CANCEL_ENABLE(缺省)和PTHREAD_CANCEL_DISABLE,分别表示收到信号后设为CANCLED状态和忽略CANCEL信号继续运行;old_state如果不为NULL则存入原来的Cancel状态以便恢复。
int pthread_setcanceltype(int type, int *oldtype)
设置本线程取消动作的执行时机,type由两种取值:PTHREAD_CANCEL_DEFFERED和PTHREAD_CANCEL_ASYCHRONOUS,仅当Cancel状态为Enable时有效,分别表示收到信号后继续运行至下一个取消点再退出和立即执行取消动作(退出);oldtype如果不为NULL则存入运来的取消动作类型值。
void pthread_testcancel(void)
检查本线程是否处于Canceld状态,如果是,则进行取消动作,否则直接返回。
发送终止信号给thread线程,如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。
int pthread_setcancelstate(int state, int *oldstate)
设置本线程对Cancel信号的反应,state有两种值:PTHREAD_CANCEL_ENABLE(缺省)和PTHREAD_CANCEL_DISABLE,分别表示收到信号后设为CANCLED状态和忽略CANCEL信号继续运行;old_state如果不为NULL则存入原来的Cancel状态以便恢复。
int pthread_setcanceltype(int type, int *oldtype)
设置本线程取消动作的执行时机,type由两种取值:PTHREAD_CANCEL_DEFFERED和PTHREAD_CANCEL_ASYCHRONOUS,仅当Cancel状态为Enable时有效,分别表示收到信号后继续运行至下一个取消点再退出和立即执行取消动作(退出);oldtype如果不为NULL则存入运来的取消动作类型值。
void pthread_testcancel(void)
检查本线程是否处于Canceld状态,如果是,则进行取消动作,否则直接返回。
|
可以通过进程中其他线程发送取消请求来强制终止目标线程o_thread!
其他线程可以执行 pthread_cancel(pthread_t o_thread)发送Cancel信号来强制终止它;
而o_thread中设置对Cancel信号反应。
其他线程可以执行 pthread_cancel(pthread_t o_thread)发送Cancel信号来强制终止它;
而o_thread中设置对Cancel信号反应。
|
线程内部调用pthread_exit,如果没有什么信息要返回,pthread_exit(NULL)就行。其实初始函数直接返回就是线程结束了。其他线程用pthread_cancel终止该线程,一定要注意Cancellation Points,因为涉及到资源的释放问题,所以可能需要pthread_cleanup_push和pthread_cleanup_pop来处理。
可以看看《PThreads Primer》中关于cancle的内容。
可以看看《PThreads Primer》中关于cancle的内容。