如何通过pthread_self()正确获取tid?

问题描述 投票:0回答:1

正如我在标题中提到的,我尝试通过

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)

结果不对,是我哪里做错了吗?

linux pthreads
1个回答
0
投票

偏移虚拟[]的大小不正确。 我使用的是 Ubuntu 18.04,以下内容对我有用。

struct pthread_fake
{
    void *dummy[89];
    pid_t tid;
};
© www.soinside.com 2019 - 2024. All rights reserved.