语法

#include <pthread.h>

void pthread_cleanup_push_defer_np(void (*routine)(void *),
                                   void *arg);
void pthread_cleanup_pop_restore_np(int execute);

编译并链接-pthread。

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

pthread_cleanup_push_defer_np(),pthread_cleanup_pop_defer_np():

_GNU_SOURCE
PTHREAD_CLEANUP_PUSH_DEFER_NP - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

遵循规范

这些功能是非标准的GNU扩展。因此名称中的后缀" _np"(不可移植)。

说明

这些功能与pthread_cleanup_push(3)和pthread_cleanup_pop(3)相同,不同之处在于此页上的区别。

pthread_cleanup_push(3)一样,pthread_cleanup_push_defer_np()将例程推入线程的取消清除处理程序堆栈。另外,它还保存线程的当前取消类型,并将取消类型设置为" 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);

名称

pthread_cleanup_push_defer_np,pthread_cleanup_pop_restore_np-推送和弹出线程取消清理处理程序,同时保存取消类型

日期:2019-08-20 18:01:02 来源:oir作者:oir