正如我在标题中提到的,我尝试通过
tid
获取 pthread_self()
(线程 id)。 (我这样做的原因是因为我试图避免系统调用)
我知道可能没有便携式解决方案,但没关系。我正在寻找适用于特定环境的解决方案。
我的目标环境正在使用 POSIX pthread 并且
glibc版本是ldd(Ubuntu GLIBC 2.31-0ubuntu9.1)2.31
在 Ubuntu 20.04 下运行。
以下是我到目前为止所做的,
我尝试将
pthread_self
的返回值转换为 strcut pthread
,其中 tid
作为成员。另外,通过link进入
struct pthread
的定义,tid
前面有两个成员。
struct pthread_fake
{
void *dummy[2];
pid_t tid;
};
...
printf("%d\n", ((struct pthread_fake *)pthread_self())->tid)
结果不对,是我哪里做错了吗?
偏移虚拟[]的大小不正确。 我使用的是 Ubuntu 18.04,以下内容对我有用。
struct pthread_fake
{
void *dummy[89];
pid_t tid;
};