0
#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;
}
このプログラムは、RHEL 5でgcc4.1.2を実行していました。pthread_self()は意味のあるスレッドIDを返しませんか?
$gcc testtid.c -lpthread && ./a.out
pid=35086,tid=35086,pt_tid=1295541984
システムコールが正しいスレッドID(同じようなプロセスID)を与えることができるが、pthread_selfが意味のある結果を与えないと思われます。
pthread_selfが移植性がないためですか?
この値は、スレッドを一意に識別します。他の方法で意味をなさないことを意図するものではありません。特に、カーネルで麻痺された識別子と同等である必要はありません。 –
これは、 "linux"コンテキスト値を示すものではなく、POSIXの移植性のためだけです。 –
はい、まさにこれです。 –