当前位置: 技术问答>linux和unix
关于线程的一点疑问
来源: 互联网 发布时间:2016-07-04
本文导语: 在LINUX中线程就是进程,无非是几个进程共享一些资源而已。 按照APUE所说,也就是每个线程的pid都是不同的,可是我在UUNTU和FEDORA中每个线程getpid()怎么得到的都是一样的呢? 求解答。。。 | ...
在LINUX中线程就是进程,无非是几个进程共享一些资源而已。
按照APUE所说,也就是每个线程的pid都是不同的,可是我在UUNTU和FEDORA中每个线程getpid()怎么得到的都是一样的呢?
求解答。。。
按照APUE所说,也就是每个线程的pid都是不同的,可是我在UUNTU和FEDORA中每个线程getpid()怎么得到的都是一样的呢?
求解答。。。
|
看看LinuxThread跟NPTL两种线程实现方式的不同就会明白了。如果用的是LinuxThread,不同线程的进程号会不一样,而NPTL不同线程的进程号是一样的。
|
posix 规定一个多线程程序必须要有一个相同的PID,但linux实现是以进程方式实现的,所以引入线程组,
一个线程组的PID是一样的,就是第一个线程的PID,他存放在tgid字段,getpid返回的是cuurent->tgid而不适pid,所以一个多线程应用程序中的所有线程共享相同的标识符。
一个线程组的PID是一样的,就是第一个线程的PID,他存放在tgid字段,getpid返回的是cuurent->tgid而不适pid,所以一个多线程应用程序中的所有线程共享相同的标识符。
|
线程id还是会不一样的,但是进程id和线程组id是一样的。
|
所谓“线程就是进程”——这可能只是针对底层的实现来说。
从上层的API来看,对外怎么也得表现出同一个pid(哪怕通过欺骗手段),否则白实现了。
从上层的API来看,对外怎么也得表现出同一个pid(哪怕通过欺骗手段),否则白实现了。