线程介绍相关功能的使用方法。

linux获取线程id的方法

  1. 通过gettid()获取
1
2
3
4
5
6
#include <unistd.h>
#include <syscall.h>
inline pid_t gettid(void)
{
    return (pid_t)syscall(__NR_gettid);
}
  1. 通过pthread_self()获取
1
2
3
4
5
void* func(void *ptr)
{
    printf("The id of %s is %u\n",(char*)ptr,(unsigned int)pthread_self());
    return (void*)0;
}

两种获取tid方法的差异:

pthread_self()是glibc提供的接口,是由线程库实现的。
gettid()获取的tid是内核分配的,通过该方法获取到的tid和pid类似。可以通过命令ps -Tp PID获取当前进程中的线程。