Linux C代码获取线程ID
gettid
可以获取线程id
,但是通过man gettid
可以看到下面这两句
也就是说glibc
没有为这个gettid
封装系统调用,需要使用syscall
。
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
tid = syscall(SYS_gettid);
具体通过上面的代码就可以的到线程ID
。
调用这个函数返回的线程id,与POSIX thread ID
(通过调用pthread_self
的结果不是同一个东西)。
下面我们再通过man pthread_self
看看关于它的描述
线程ID
保证仅在进程中是唯一的。 在连接已终止的线程或已分离的线程已终止后,可以重用线程 ID
。
这里也说明pthread_self
获取的线程ID
只保证在进程中是唯一的,不同的进程中的线程ID
有可能是不同的。
pthread_self
得到的也就是POSIX thread ID
,它是由线程库实现来负责分配和维护,gettid()
返回的线程ID是一个有内核分配的数字,类似进程ID
.
pthread_self
得到的线程ID是不同通过系统命令查看的,比如top
命令,这些看到的线程ID都是通过gettid
得到的。