方法1:在创建线程的时候通过设置pthread_create函数的第二个参数将线程设置为detach状态
方法2:在主线程中调用pthread_join来等待子线程退出
方法3:在主线程或子线程中调用pthread_detach函数设置线程的detach状态
(注意:detach状态下的线程由系统负责释放资源,此状态下的线程pthread_join捕捉不到,但是一旦阻塞在pthread_join函数中,此时设置子线程detach状态不能立马让主线程pthread_join解除阻塞状态)
线程处理函数放回值是void但是可以通过强制转换(void *)来返回值,由pthread_join第二个参数捕捉,而pthread_join返回值表示线程的状态。
线程取消和线程清理主线程或其他线程可以通过调用pthread_cancel取消某个线程的执行,子线程可以通过函数pthread_setcancelstate设置是否接受线程取消,也可以通过pthread_setcanceltype设置线程是立即取消还是延迟取消(延迟取消函数很多,一般不采用)。
设置线程清理函数后,线程取消、pthread_exit()、return(手册上说return不会调用线程清理函数,但是实验时还是调用了,欢迎大佬指正)时都会根据pthread_cleanup_push压栈的逆序调用线程清理函数
信号的接收单位是进程,信号到来引起软中断并不会中断子线程的执行(pthread_join这个函数如果在进行等待子线程结束的话也不会被中断),在一个进程中一个信号只能有一个处理函数,无论signal函数在主线程还是子线程中捕捉信号都是一样的效果(但是要注意用pthread_kill给子线程发送信号时候signal函数是否已经执行过了,否者就进行默认处理)。



