如何退出线程

      之前对于线程如何退出一直不是特别清楚,以前发现用pthread_kill函数退出线程没有效果,今天看了一些别人的博客才发现线程退出的原理,而且pthread_kill函数只是向特定的线程发信号。下面是一些如何在死循环中结束线程的方法。

       第一:可以利用pthread_kill函数向线程发信号,而后在信号处理函数里面设置一个flag,当线程中检测到该该flag置位后退出死循环,结束线程。

       pthread_kill(pthread_t tid,int sig)

       第一个参数为需要kill的线程的线程id,第二个参数为信号。注意,信号为SIGQUIT,但线程未处理该信号会导致线程所在的进程退出。

       第二:可以使用pthread_cancel函数向需要退出的线程发送CANCEL信号,然后在线程中使用pthread_testcancel函数检测是否有CANCEL信号发过来。收到该信号就可以直接退出了。

        pthread_cancel(pthread_t tid); 向线程发送CANCEL信号。

        pthread_testcancel();检测是否收到CANCEL信号。

        另外可以用下列函数可以设置如何退出线程。   

 

             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则存入运来的取消动作类型值。  

        第三:pthread_exit函数,这个是线程主动退出。

你可能感兴趣的:(如何退出线程)