pthread_self()不返回有意义的线程ID?

时间:2017-06-27 09:00:39

标签: c linux pthreads self

#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<sys/types.h>
int main(){
    int systid=syscall(186);
    int pt_tid=pthread_self();
    pid_t id=getpid();
    printf("pid=%d,tid=%d,pt_tid=%d\n",id,systid,pt_tid);
    return 0;
}

我使用gcc4.1.2在RHEL 5上运行此程序。

$gcc testtid.c -lpthread && ./a.out
pid=35086,tid=35086,pt_tid=1295541984

似乎系统调用可以提供正确的线程ID(与进程ID相同),但是pthread_self没有给出有意义的结果。

是因为pthread_self不可移植吗?

1 个答案:

答案 0 :(得分:4)

如果您阅读man pthread_self,您应该:

  

线程标识符应被视为不透明:任何尝试使用除pthreads调用之外的线程ID都是不可移植的,并且可能导致未指定的结果。

     

保证线程ID仅在进程内是唯一的。在已加入已终止的线程或已分离的线程已终止之后,可以重用线程ID。

     

pthread_self()返回的线程ID与调用gettid(2) 返回的内核线程ID不同。