免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9214 | 回复: 10
打印 上一主题 下一主题

[C] 线程执行后自己退出,该用哪种方法? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-03 16:19 |只看该作者 |倒序浏览
主线程判断某种情况,当情况发生后创建一个子线程,处理该情况,然后该子线程退出。主线程继续判断情况是否发生,如果发生,继续创建子线程进行处理。

任务要求如上,请问,子线程退出改用哪种方法?return,exit还是pthread_exit?需要子线程退出后能够释放资源。而且在主线程中能够重新创建该子线程。

谢谢

论坛徽章:
0
2 [报告]
发表于 2010-02-03 16:25 |只看该作者
pthread_exit

论坛徽章:
0
3 [报告]
发表于 2010-02-03 16:26 |只看该作者
return和exit你可以试一试,没关系的,做一个调试派没什么不好的。

论坛徽章:
0
4 [报告]
发表于 2010-02-03 16:35 |只看该作者
多谢指点。编程确实需要多多调试,目前有点不爱动脑子,想尽快得到最佳答案,而且自己调试功夫还不到家,任务要求又紧。
以后真的需要自己多动手调试了。

查到一些说明:
pthread_exit()用于线程退出,可以指定返回值,以便其他线程通过pthread_join()函数获取该线程的返回值
return,是函数返回,不一定是线程函数哦! 只有线程函数return,线程才会退出
exit()是进程退出,如果在线程函数中调用exit,那改线程的进程也就挂了

论坛徽章:
0
5 [报告]
发表于 2010-02-03 17:03 |只看该作者
一般情况下,进程中各个线程的运行都是相互独立的,线程的终止并不会通知,也不会影响其他线程,终止的线程所占用的资源也并不会随着线程的终止而得到释放。正如进程之间可以用wait()系统调用来同步终止并释放资源一样,线程之间也有类似机制,那就是pthread_join()函数。
void pthread_exit(void *retval)
int pthread_join(pthread_t th, void **thread_return)
int pthread_detach(pthread_t th)
    pthread_join()的调用者将挂起并等待th线程终止,retval是pthread_exit()调用者线程(线程ID为th)的返回值,如果thread_return不为NULL,则*thread_return=retval。需要注意的是一个线程仅允许唯一的一个线程使用pthread_join()等待它的终止,并且被等待的线程应该处于可join状态,即非DETACHED状态。
    如果进程中的某个线程执行了pthread_detach(th),则th线程将处于DETACHED状态,这使得th线程在结束运行时自行释放所占用的内存资源,同时也无法由pthread_join()同步,pthread_detach()执行之后,对th请求pthread_join()将返回错误。
    一个可join的线程所占用的内存仅当有线程对其执行了pthread_join()后才会释放,因此为了避免内存泄漏,所有线程的终止,要么已设为DETACHED,要么就需要使用pthread_join()来回收。

http://www.ibm.com/developerwork ... readapi/part4/#main

论坛徽章:
0
6 [报告]
发表于 2010-03-11 17:25 |只看该作者
好贴!!学习一下。要是在写写就更好了。

论坛徽章:
0
7 [报告]
发表于 2010-03-11 18:38 |只看该作者
无论你用return还是pthread_exit如果事先没有设置线程属性,默认都不会释放资源.不过你可以在线程处理函数里加上 pthread_detach(pthread_self());
这样线程结束时就会自己释放资源.

论坛徽章:
0
8 [报告]
发表于 2010-03-11 20:59 |只看该作者
pthread_exit(NULL);

论坛徽章:
0
9 [报告]
发表于 2010-03-11 21:52 |只看该作者
推荐的做法是线程自己结束自己, 这样可以避免线程中丢失数据.

论坛徽章:
0
10 [报告]
发表于 2010-03-12 09:33 |只看该作者
return
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP