免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zydzmapx

加急跪求帮助:线程资源释放的问题 [复制链接]

论坛徽章:
0
发表于 2008-08-24 17:42 |显示全部楼层
我前面的设计方法还是我最喜欢的一种设计方法,后续继续研究争取实现它,如果哪有大虾有这种小例程(不想用jion的方式,用分离的方式),小妹不胜感谢!我的QQ:229635411

论坛徽章:
0
发表于 2008-08-24 18:12 |显示全部楼层
我觉得有些迷惑哈,既然是线程自己在那里处理自己的那个socket连接,那么socket断开后,你那个线程应该知道阿,这时退出线程就行了赛,还有就是你创建线程时要设置detach属性才能在线程退出时自动清理资源
你如果非要用pthread_kill的话也是可以的,你要首先为某个信号建立起handler,然后在这个handler中调用pthread_exit应该也可以吧
如果你要用pthread_cancel的话,你要明白线程并不是每时每刻都可以被cancel的,cancel只会发生在一些叫做cancel point的地方

论坛徽章:
0
发表于 2008-08-24 18:19 |显示全部楼层
原帖由 zydzmapx 于 2008-8-24 17:40 发表
在经历了2个星期的各种尝试和改造后,依然没有解决我想象中的动态创建和关闭线程的资源释放的问题,在此郑重的向各位好心人表示真心的感谢,最后采纳了duanjigang和 贺兰云天 的意见,即客户端连接线程创建不释 ...


嵌入式设备上有时候本身问题就很奇怪,内存泄露也不一定是你的问题,我曾经碰到一个内存泄露的问题:我不停的打开关闭不同文件(只是打开和关闭,没有其它任何操作),内存会不断地减少。

还有你的内存减少也可能是没有回收线程使用的栈,我好像做个试验,即使我调用pthead_join某个线程后,仍然能够访问该线程的栈空间

论坛徽章:
0
发表于 2008-08-25 10:31 |显示全部楼层
原帖由 zydzmapx 于 2008-8-24 17:40 发表
在经历了2个星期的各种尝试和改造后,依然没有解决我想象中的动态创建和关闭线程的资源释放的问题,在此郑重的向各位好心人表示真心的感谢,最后采纳了duanjigang和 贺兰云天 的意见,即客户端连接线程创建不释 ...

呵呵,我的这个建议是自己实践过的经验总结。
07年一月份做过一个跟你这个很类似的东西,一开始也是想着动态创建,释放,感觉原理上很完美,不过最后发现越来越复杂,问题越来越多。
还是改变了设计方法。
这几天做的这个expect脚本的程序也要用多线程,一开始我就决定在程序启动时创建50-200个线程,后来发现200个线程会导致TCP连接太多,从而SSH执行命令失败
最后改到50个线程,现在效果还不错,1.5分钟基本上2000台机器就能返回结果。
ligyf 该用户已被删除
发表于 2008-08-25 17:03 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2008-08-26 15:29 |显示全部楼层
原帖由 bobozhang 于 2008-8-24 18:12 发表
我觉得有些迷惑哈,既然是线程自己在那里处理自己的那个socket连接,那么socket断开后,你那个线程应该知道阿,这时退出线程就行了赛,还有就是你创建线程时要设置detach属性才能在线程退出时自动清理资源
你如果非要用pthread_kill的话也是可以的,你要首先为某个信号建立起handler,然后在这个handler中调用pthread_exit应该也可以吧
如果你要用pthread_cancel的话,你要明白线程并不是每时每刻都可以被cancel的,cancel只会发生在一些叫做cancel point的地方



我的程序都能灵敏的检测到socket的连接和断开,同时我也知道哪个线程对象负责哪个socket, 因此关闭socket就是关闭对应的线程所在对象,我在释放线程所在对象时就调用了关闭线程的方法,但对象的资源是释放了,但线程自身创建时占用的资源没有释放,哎,郁闷 ,  
   在大家的指点下,创建线程前设置了detach属性, 我在释放线程所在对象时先通过标志变量退出线程死循环,然后再调用了pthread_kill(),理论上感觉因该可以的,但事实上每用,我个人看法是可能哪些点我还没用好造成的

论坛徽章:
0
发表于 2008-08-26 15:35 |显示全部楼层
原帖由 duanjigang 于 2008-8-25 10:31 发表

呵呵,我的这个建议是自己实践过的经验总结。
07年一月份做过一个跟你这个很类似的东西,一开始也是想着动态创建,释放,感觉原理上很完美,不过最后发现越来越复杂,问题越来越多。
还是改变了设计方法。: ...



我做的是104规约程序,规约存在每一个客户连接可能存在不断的连接断开的情况,最坏的情况是隔几秒就会断开重连,如果我前面说的问题不解决,很可能不到几个小时,系统就会崩溃
    您说的一个线程处理几个socket连接是个咋回事呢?

论坛徽章:
0
发表于 2008-08-28 17:34 |显示全部楼层

不知道你还关注不,有个参考。

http://casit.blogbus.com/logs/7733899.html

或者

http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310478427421297634b878e482a84d40984642c101a39fee57a775119d6c07d660ba4424bea876c34685d34f2c688de459ffdc86878db7123706dd70145805ff8&p=9b759a46c08b10e00be2913516&user=baidu

叙述的问题和你比较接近。

论坛徽章:
0
发表于 2008-08-31 15:56 |显示全部楼层
我觉得把attr设置成detach就应该会自动释放资源

论坛徽章:
0
发表于 2010-05-21 10:30 |显示全部楼层
thread_create()
thread_detach()
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP