|
有2个问题请高手指点
程序太长了 就不完整列出了
把大概的函数打下
thr_fn2(void *arg){
printf(....).....
pthread_cleanup_push(.......);
pthread_cleanup_push(.......)
if(arg)
pthread_exit((void *)2);
pthread_cleanup_pop(0);
pthread_cleanup_pop(0);
pthread_exit((void *)2);
}
一个问题是 pthread_cleanup_pop的参数如果是0的话 清理函数不被调用 只是删除上次pthread_cleanup_push调用建立的清理处理程序. 那为什么
pthread_cleanup_pop(0);
pthread_cleanup_pop(0);
后 运行结果却是清理程序被调用.
还有个是代码段
if(arg)
pthread_exit((void *)2);
pthread_cleanup_pop(0);
pthread_cleanup_pop(0);
pthread_exit((void *)2);
主程序段传入的参数是(void *)1;
那么不是应该直接退出 而不是继续执行下面的语句么.
pthread_cleanup_pop(0);
pthread_cleanup_pop(0);
pthread_exit((void *)2); |
|