免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zydzmapx
打印 上一主题 下一主题

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

论坛徽章:
0
1 [报告]
发表于 2008-08-21 19:58 |显示全部楼层
设置一个标识位flag, 初始为0, 在析构函数中去掉pthread_kill, 然后加上flag = 1;表示该对象已经销毁.
另外,在TGC_ThreadFunc中, 不是一个无限循环么? 在循环之初, 判断flag的值, 如果为1, 则调用pthread_exit()退出线程.

论坛徽章:
0
2 [报告]
发表于 2008-08-21 20:00 |显示全部楼层
>>每次我new一个MySockClient的对象时,执行pthread_create()将消耗大量的资源
线程创建不会消耗很大的资源啊.

论坛徽章:
0
3 [报告]
发表于 2008-08-21 20:16 |显示全部楼层
其实真的的原因是你没有认真看pthread_kill的说明:
if sig is zero, error checking shall be performed but  no
       signal shall actually be sent.

所以此时你只是在检查你的线程是否存在 ,但是并没有终止这个线程.

或者你直接使用pthread_cancel()取代pthread_kill()

[ 本帖最后由 scutan 于 2008-8-21 20:25 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-08-21 22:31 |显示全部楼层
原帖由 zydzmapx 于 2008-8-21 22:27 发表




我明天上班后试一下,只是不知使用pthread_cancel()前是否需要使用pthread_join之类的函数处理,谢谢



不需要了.

论坛徽章:
0
5 [报告]
发表于 2008-08-21 23:22 |显示全部楼层
原帖由 zydzmapx 于 2008-8-21 22:43 发表
scutan,我的主进程是不会退出的,除非程序异常退出或者系统崩溃,您说的pthread_cancel(pid) 适合我的主进程不退出的情况吗

适合,它不会对你的主进程造成影响的。

论坛徽章:
0
6 [报告]
发表于 2008-08-22 10:06 |显示全部楼层
原帖由 zydzmapx 于 2008-8-22 09:46 发表
为了验证大家的方法,我作料一个小的测试程序如下(由于是从别的例子程序改造过来的,存在部分程序啰嗦,请别追究,谢谢,请重点关注线程释放部分的 程序)
# include
# include
# include
# include
#  ...

楼主, 你看看下面的代码吧, 希望对你有用:


  1. #include<stdio.h>
  2. #include<pthread.h>
  3. #include<stdlib.h>
  4. #include<unistd.h>
  5. #include<sys/types.h>

  6. void* thr_fn(void* args)
  7. {
  8.                 while (1)
  9.                 {
  10.                                 sleep(1);
  11.                                 printf("my pid is %d\n", getpid());
  12.                 }

  13. }

  14. int main()
  15. {
  16.                 pthread_t tid;
  17.                 pid_t pid;
  18.                 printf("pid=%d\n", getpid());
  19.                 pthread_create(&tid, NULL, thr_fn, NULL);
  20.                 sleep(5);
  21.                 pthread_cancel(tid);
  22.                 while (1)
  23.                 {
  24.                                 sleep(2);
  25.                                 printf("in parent:tid=%u\n", tid);
  26.                 }
  27.                 return 0;
  28. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP