免费注册 查看新帖 |

Chinaunix

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

为什么gnu/linux要给每个thread单独的pid? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-21 16:40 |只看该作者 |倒序浏览
1.在gnu/linux上还有传统的thread实现吗?

2.这样做有何利弊?

Thanks in advance.

论坛徽章:
0
2 [报告]
发表于 2009-07-21 16:55 |只看该作者
旧Linux内核吧? Forget it! 现在的内核不会了,他们的PID是一样的,只是LWPID不同。

如果相同进程的不同的线程使用不同的PID,会打破线程的正常语义,其它倒没什么。

论坛徽章:
0
3 [报告]
发表于 2009-07-21 17:03 |只看该作者
Hi,谢谢John的回复。

我是看了ALP   

并在RHEL5上试了,看到pthread_create产生的thread仍然是单独pid。

论坛徽章:
0
4 [报告]
发表于 2009-07-21 17:18 |只看该作者
试试这个:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>

  4. #define THRNR 5

  5. static void*
  6. job(void *p)
  7. {
  8.         int32_t n = (int32_t)p;

  9.         printf("%d: pid=%d\n", n, getpid());
  10.         pthread_exit(NULL);
  11. }

  12. int
  13. main()
  14. {
  15.         int err, i;
  16.         pthread_t tid[THRNR];

  17.         for (i=0;i<THRNR;++i) {
  18.                 err = pthread_create(tid+i, NULL, job, (void*)i);
  19.                 if (err) {
  20.                         fprintf(stderr, "??\n");
  21.                         exit(1);
  22.                 }
  23.         }
  24.         for (i=0;i<THRNR;++i) {
  25.                 pthread_join(tid[i], NULL);
  26.         }
  27.         exit(0);
  28. }
复制代码


贴你的代码!

论坛徽章:
0
5 [报告]
发表于 2009-07-21 20:41 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2009-07-22 10:55 |只看该作者
linux内核2.6之前都是酱紫的  ,以前的线程可以说是轻量级进程 占用一个 pid

论坛徽章:
0
7 [报告]
发表于 2009-07-22 11:13 |只看该作者
对内核代码来说
getpid返回的是task_struct里面的tgid
gettid返回的是task_struct里的pid
每个线程一个tid(内核中叫pid),一个进程的所有线程共享一个pid(内核中叫tgid)
好像是这样的吧,曾被这几个id搞的迷迷糊糊的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP