免费注册 查看新帖 |

Chinaunix

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

[C] 多线程程序退出时资源释放问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-04 11:26 |只看该作者 |倒序浏览
工程有上十多个线程, 有多处malloc的地方,最近发现有内存越界的现象发生,所以想用valgrind找出问题.
为了完整的捕捉到更多问题.我想在程序正常退出的情况下释放所有资源,所以我使用的atexit函数自动释放,
结果atexit运行的时候线程还在调度,导致产生了更多的非法读取数据的现象.这些线程大多数都是
没有出口的,基本上是while(1)!
我也曾经试过用pthread_cancel挂掉线程,效果还是一样.valgrind的错误提示依然很多.
所以在这里想问问还有没有别的方法在程序退出时释放那些可能被多个线程使用的资源?
感谢先!

论坛徽章:
0
2 [报告]
发表于 2008-08-04 13:22 |只看该作者
自己先顶一个!
由于线程太多,不可能用锁, 信号量搞定的.

论坛徽章:
0
3 [报告]
发表于 2008-08-04 14:06 |只看该作者
只要把流程走完全就可以...为什么线程要退出。..

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
4 [报告]
发表于 2008-08-04 14:14 |只看该作者
pthread_cancel然后作一个全局标记

论坛徽章:
0
5 [报告]
发表于 2008-08-04 19:19 |只看该作者
原帖由 ruchong 于 2008-8-4 14:06 发表
只要把流程走完全就可以...为什么线程要退出。..

流程本来就是死循环, 我为了测试弄了退出的方法,就碰到这些问题了.
问题的重点是atexit执行的时候线程调度还在运行,用pthread_cancle也没有什么效果.

论坛徽章:
0
6 [报告]
发表于 2008-08-04 20:45 |只看该作者
问题已经解决!还是要用pthread_cancle,只不过我的valgrind少了些测试参数,

论坛徽章:
0
7 [报告]
发表于 2008-08-04 20:54 |只看该作者
这问题你就得自己漫漫查了

论坛徽章:
0
8 [报告]
发表于 2008-08-04 23:16 |只看该作者
线程死锁是很难处理的,协调退出.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP