多线程服务程序,socket连接断开后,残留线程占cpu100%

hongtog 2009-08-05 09:18:59

hpux b 11.11平台
多线程服务程序, 客户端socket连接后,服务创建线程处理数据, socket断开,结束线程。

但socket连接断开后,残留线程占cpu100%。

其实是死线程, 看不到信息, gdb看到只有
(gdb) where
#0 0xc0000000003ebfac in __pthread_body+0x3c () from /usr/lib/pa20_64/libpthread.1
#1 0xc0000000003f689c in __pthread_start+0x14 () from /usr/lib/pa20_64/libpthread.1

truss 发现异常的
In user-mode [running]
In user-mode [running]

忘高人指点? 线程在干什么?
...全文
320 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
crescent_star 2009-08-11
  • 打赏
  • 举报
回复
线程出现这种情况一般都是死循环了。
loud1984 2009-08-11
  • 打赏
  • 举报
回复
我觉得可能与线程关系不大,而是你线程里面操作逻辑上可能会发生死循环等。其实我是觉得多线程的话,调度很麻烦的,不如直接用select。poll或者epoll模型
wuxiaohu 2009-08-11
  • 打赏
  • 举报
回复
服务端线程是否全部释放?
gunsand 2009-08-11
  • 打赏
  • 举报
回复
原因太多了。 不过应该是进了个死循环。
hongtog 2009-08-08
  • 打赏
  • 举报
回复
这个线程比较奇怪。 关键是线程体函数根本没运行,
基本判定是创建线程函数的时候pthread_create 挂死,并高占CPU.



w0911h 2009-08-06
  • 打赏
  • 举报
回复
recv()有没有判断返回值>0,如果<=0则又在死循环接收数据就会出现你说的情况,此时说明socket连接出问题,需要重新连接
lzy0001sl 2009-08-06
  • 打赏
  • 举报
回复
“socket断开”是客户端断开的还是服务器,是不是服务器的还在死等啊?
zhusizhi007 2009-08-06
  • 打赏
  • 举报
回复
应该是线程还没有结束吧,把关键代码贴出来看看.......
  • 打赏
  • 举报
回复
你尝试在代码段插入select模型,在检测断开的时候主动退出线程,看还ok不?
我啃 2009-08-05
  • 打赏
  • 举报
回复
你的线程函数在干吗,死循环收内容的话,需要判断如果socket关闭了,自动结束自己~

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧