侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

pthread_cleanup_push_defer_np函数用法详解

noerror
2022-10-04 / 0 评论 / 0 点赞 / 129 阅读 / 454 字 / 正在检测是否收录...

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);
0

评论区