pthread_selfの概要

1807 ワード

NAME
    pthread_selfは呼び出しスレッドのIDを得る
SYNOPSIS             #include
       pthread_t pthread_self(void);        リンクをコンパイルするときにパラメータを持っていく-pthread.
DESCRIPTION       pthread_self()関数は、呼び出しスレッドのIDを返します.この値と呼び出しpthread_createがこのスレッドを作成するときに使用する*threadパラメータの値は同じです.
 
RETURN VALUE           この関数は常に成功し,呼び出しスレッドのIDを返す.
NOTES        Thread IDsは、1つのプロセス内の一意性のみを保証します.終了したスレッドjoined(joinを使用してスレッドの終了を待つ)の後、 あるいは、detached状態のスレッドが終了するとthread IDが再使用される可能性があります. pthread_self()が返すスレッドIDはgettid()を呼び出して得られるカーネルスレッドIDとは異なる.
 
例:
#include <pthread.h>   
#include <stdlib.h>   
#include <stdio.h>   

#include <sys/syscall.h>

pthread_t ntid;  

pid_t gettid(void)
{
  return syscall(__NR_gettid);
}


void printids(const char *s)  
{  
    pid_t pid;  
    pthread_t tid;  
    pid = getpid();  
    tid = pthread_self();  
    printf("%s pid is:%u ;tid is :%u (0x%x)
", s,(unsigned int)pid, (unsigned int)tid, (unsigned int)tid); printf("%s kid is:%u
",s,gettid() ); } void *thr_fn(void *arg) { printids("new thread: "); return((void *)0); } int main() { int err; err = pthread_create(&ntid, NULL, thr_fn, NULL); printf("in main ntid is :%u
",ntid); if (err != 0) printf("can't create thread: %d
", strerror(err)); printids("main thread:"); sleep(3); return 0; }

コンパイル:
$ gcc temp.c -lpthread
実行出力:$./a.out
in main ntid is :3078953840 main thread: pid is:2663 ;tid is :3078961968 (0xb7853b30) main thread: kid is:2663 new thread:  pid is:2663 ;tid is :3078953840 (0xb7851b70) new thread:  kid is:2664