pthread_self 简介

NAME

    pthread_self 得到调用线程的ID


SYNOPSIS     
       #include <pthread.h>

       pthread_t pthread_self(void);
       编译链接的时候带上参数-pthread.


DESCRIPTION 
     pthread_self()函数返回调用线程的ID.这个数值与调用 pthread_create 创建本线程时使用的*thread 参数返回的值是一样的。

 

RETURN VALUE     
     这个函数总是成功,返回调用线程的ID。


NOTES  
     Thread IDs 仅仅保证在一个进程内部的唯一性。当一个结束了的线程 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)\n", s,(unsigned int)pid, (unsigned int)tid, (unsigned int)tid);
    printf("%s kid is:%u\n",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\n",ntid);
    	if (err != 0)  
        	printf("can't create thread: %d\n", 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

 

 

 

 

 

 

你可能感兴趣的:(pthread_self 简介)