pthread_cleanup_push】的更多相关文章

线程退出前可能有一些清理工作,但是这部分代码又不会放到线程主体部分,就需要挂接一个或者几个线程“清洁工”来做这部分事情.需要这对兄弟: #include<pthread.h> void pthread_cleanup_push(void (*rtn)(void *), void *arg); void pthread_cleanup_pop(int execute); 显然pthread_cleanup_push() 是挂接 清理函数的,它的返回值类型为 void,有两个入口参数,第一个参数是…
一般来说,Posix的线程终止有两种情况:正常终止和非正常终止.线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式:非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的. 不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题. 最经常出现的情形是资源独占…
参考: http://blog.csdn.net/zjc156m/article/details/9021343 http://blog.csdn.net/u010027547/article/details/48575707 http://www.cnblogs.com/lijunamneg/archive/2013/01/25/2877211.html 比如thread1:执行pthread_mutex_lock(&mutex);//一些会阻塞程序运行的调用,比如套接字的accept,等待客…
pthread_cleanup_push()/pthread_cleanup_pop()的详解 分类: Linux 2010-09-28 16:02 1271人阅读 评论(1) 收藏 举报 asynchronousbufferapistructlinux编程 刚练习线程的条件变量时碰到了这两个函数,关于这两个函数书上讲的比较模糊,所以在网上找到了一篇我感觉讲的很好的一篇文章,就是关于线程的终止,大概如下: 一般来说,Posix的线程终止有两种情况:正常终止和非正常终止.线程主动调用pthread…
http://bbs.csdn.net/topics/390688105 2)创建了线程,但是线程退出时没有线程调用pthread_join() 线程资源没有回收,如果持续创建线程,到一定数量后将不能再创建! 可以在创建的线程中使用pthread_detach(pthread_self()),主线程就可以不调用pthread_join() 1)只有pthread_cleanup_push() 直到进程退出都 没有调用pthead_cleanup_pop() pthread_cleanup_pus…
http://www.cnblogs.com/hnrainll/archive/2011/04/20/2022149.html #include<stdlib.h> #include<stdio.h> #include<unistd.h> #include<pthread.h> void clean_fun1(void * arg) {     printf("this is clean fun1\n"); } void clean_fu…
示例1: #include <stdio.h> #include <pthread.h> void* clean(void* arg) { printf("cleanup:%s\n", (char*)arg); ; } void* thrd_fn1(void* arg) { printf("thrd_fn1 start...\n"); pthread_cleanup_push((void*)clean, "thread1 first…
#define pthread_cleanup_push(func, val) \ { \ struct __darwin_pthread_handler_rec __handler; \ pthread_t __self = pthread_self(); \ __handler.__routine = func; \ __handler.__arg = val; \ __handler.__next = __self->__cleanup_stack; \ __self->__cleanu…
一.为什么会有pthread_cleanup_push与pthread_cleanup_pop: 一般来说,Posix的线程终止有两种情况:正常终止和非正常终止.线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式:非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的. 不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺…
黑幕背后的Autorelease http://www.cnblogs.com/feng9exe/p/7239552.html objc_autoreleasePoolPush的返回值正是这个哨兵对象的地址,被objc_autoreleasePoolPop(哨兵对象)作为入参,于是: 根据传入的哨兵对象地址找到哨兵对象所处的page 在当前page中,将晚于哨兵对象插入的所有autorelease对象都发送一次- release消息,并向回移动next指针到正确位置 补充2:从最新加入的对象一直…