- 论坛徽章:
- 1
|
菜鸟勿拍哈,pthread_cleanup_push函数,当pthread_clean_pop的参数execute为非零时,线程应该执行清理函数,这个对吧?
我的代码如下:- #include <pthread.h>
- #include "apue.h"
- void
- cleanup(void *arg)
- {
- printf("cleanup : %s\n", (char *)arg);
- }
- void *
- thr_fn1(void *arg)
- {
- printf("thread 1 start\n");
- pthread_cleanup_push(cleanup, "thread 1 first handler");
- pthread_cleanup_push(cleanup, "thread 1 second handler");
- printf("thread 1 push complete\n");
- if(arg)
- return ((void *)1);
- pthread_cleanup_pop(1);
- pthread_cleanup_pop(1);
- return ((void *)1);
- }
- int
- main(void)
- {
- int err;
- pthread_t tid1;
- void *tret;
- err = pthread_create(&tid1, NULL, thr_fn1, (void *)1);
- if(err != 0)
- err_quit("can't create thread 1 : %s\n", strerror(err));
- err = pthread_join(tid1, &tret);
- if(err != 0)
- err_quit("can't join with thread 1 : %s\n", strerror(err));
- printf("thread 1 exit code %d\n", (int)tret);
- exit(0);
- }
复制代码 但是运行结果依然没有调用清理函数,怎么回事阿? |
|