#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不可移植吗?
答案 0 :(得分:4)
如果您阅读man pthread_self
,您应该:
线程标识符应被视为不透明:任何尝试使用除pthreads调用之外的线程ID都是不可移植的,并且可能导致未指定的结果。
保证线程ID仅在进程内是唯一的。在已加入已终止的线程或已分离的线程已终止之后,可以重用线程ID。
pthread_self()
返回的线程ID与调用gettid(2)
返回的内核线程ID不同。