pthread_join(pthread_t tid,void **rval_ptr)
old线程创建了new线程,然后调用pthread_join来等待new线程返回,返回值为*rval_ptr
apue中提到一个线程的分离状态概念:
类比于进程,子进程在退出中,会保留退出状态供父进程调用wait/waitpid获取
对于线程,P318:默认情况下,线程的终止状态会保存知道对该线程调用pthread_join;P312:pthread_join自动把线程置于分离状态
而处于分离状态的线程会由系统回收资源
另:对已处于分离状态的线程(比如在创建时设置属性为分离状态)调用pthread_join,会产生未定义的行为
可以调用pthread_detach(tid)将线程置于分离状态。
pthread_cleanup_push/pthread_cleanup_pop
在网上查到这两个函数是用宏实现的,push函数中有'{',pop函数中有'}',因此一定要成对出现。
push()
/*
代码
*/
pop(execut)
如果线程在push和pop之间以pthread_exit()退出,或者响应其他线程对该线程调用的pthread_cancel退出,会自动调用push建立的清理函数
如果是return则不调用
当线程正常运行到pop时(即没有退出),如果execute为0,则不会调用清理函数,否则调用清理函数。同时,无论是否调用清理函