pthread_cleanup_push_defer_np函数用法详解
pthread_cleanup_push_defer_np函数简介
- 头文件包含
#include <pthread.h>
- 函数定义
void pthread_cleanup_push_defer_np(void (* routine )(void *),
void * arg );
void pthread_cleanup_pop_restore_np(int execute );
- 编译链接选项
-pthread
pthread_cleanup_push_defer_np函数常见使用错误
- 链接错误
undefined reference to `pthread_cleanup_push_defer_np'
解决办法:添加链接选项
-pthread
- 编译错误
warning: implicit declaration of function ‘pthread_cleanup_push_defer_np’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <pthread.h>
pthread_cleanup_push_defer_np函数详细描述
这些函数与pthread_cleanup_push (3)和pthread_cleanup_pop (3)相同,只是在本页中注意到了不同之处。
与pthread_cleanup_push (3)一样,pthread_cleanup_push_defer_np ()将routine推送到线程的取消清理处理程序堆栈上。此外,它还保存线程当前的可取消性类型,并将可取消性类型设置为“deferred”(请参见pthread_setcanceltype (3));。这确保即使线程的可取消性类型在调用之前是“异步的”,也会发生取消清理。
与pthread_cleanup_pop (3)类似,pthread_cleanup_pop_restore_np ()从线程的取消清理处理程序堆栈中弹出最上面的清理处理程序。此外,它将线程的可取消性类型还原为匹配pthread_cleanup_push_defer_np ()时的值
调用方必须确保对这些函数的调用在同一函数中成对,并且处于同一词法嵌套级别。适用其他限制,如pthread_cleanup_push (3)中所述
以下调用序列:
pthread_cleanup_push_defer_np(routine, arg);
pthread_cleanup_pop_restore_np(execute);
相当于(但比):
int oldtype;
pthread_cleanup_push(routine, arg);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
\&...
pthread_setcanceltype(oldtype, NULL);
pthread_cleanup_pop(execute);
评论区