线程清除处理程序
来源:互联网 发布:ai软件免费下载 编辑:程序博客网 时间:2024/06/02 07:18
void pthread_cleanup_push(void (*rtn)(void *),void *arg)
void pthread_cleanup_pop(int execute)
清理函数rtn的调用顺序是由push函数来安排的,
1)调用pthread_exit时
2)响应取消请求时
3)用非零execute参数调用pthread_cleanup_pop时 ,代码可测试。
如果execute参数置为0,清理函数将不被调用。无论哪种情况,pthread_cleanup_pop都将删除上此pthread_cleanup_push调用建立的清理处理程序
#include <apue.h>#include <pthread.h>voidcleanup(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(0);pthread_cleanup_pop(0);return((void *)1);}void *thr_fn2(void *arg){printf("thread 2 start\n");pthread_cleanup_push(cleanup, "thread 2 first handler");pthread_cleanup_push(cleanup, "thread 2 second handler");printf("thread 2 push complete\n");if (arg)pthread_exit((void *)2);pthread_cleanup_pop(0);pthread_cleanup_pop(0);pthread_exit((void *)2);}intmain(void){interr;pthread_ttid1, tid2;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_create(&tid2, NULL, thr_fn2, (void *)1); //若第四个参数为NULL,则thr_fn2 不会调用清理处理程序,if (err != 0)err_quit("can't create thread 2: %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);err = pthread_join(tid2, &tret);if (err != 0)err_quit("can't join with thread 2: %s\n", strerror(err));printf("thread 2 exit code %d\n", (int)tret);exit(0);}0 0
- 线程清除处理程序
- 线程清理处理程序
- 线程清理处理程序
- 线程清除
- Linux线程(3): 线程清理处理程序
- c# 清除别人的控件中的原有事件处理程序
- 单线程程序处理消息的方式!
- 线程的清理处理程序pthread_cleanup_(线程六)
- 清除系统垃圾程序
- 清除系统垃圾程序
- lua清除cdn程序
- Android 清除程序缓存
- 微信小程序清除浮动
- linux线程退出时执行的程序(线程清理处理程序)简单例子
- 11、线程等待与清除
- 线程保护设计及清除
- 打字练习程序 -- Java线程/事件处理的好资料
- java中执行其他程序并处理线程阻塞
- Ubuntu输入法
- ZOJ-1439
- 数组排序【解】--英雄会
- tomcat用户配置及Address already in use: JVM_Bind错误的解决
- PGXC: data distribution in a subset of nodes
- 线程清除处理程序
- 编译原理-03 词法分析
- Hibernate:反向生成的pojo有两个的问题
- 快速阅读
- 设计模式-创建型01-简单工厂
- 看懂论文的机器学习基本知识(五)--随机森林、决策树
- berkeley db--进阶特性分析
- 使用node.js + express开发web应用笔记(2) - vash视图引擎
- 幽默