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とは異なる.
例:
コンパイル:
$ 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
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