如何在linux c程序中获取pthread的线程ID?

新手上路,请多包涵

在 Linux C 程序中,如何打印由 pthread 库创建的线程的线程 ID?例如,我们如何通过 getpid() 获取进程的 pid。

原文由 Ravi Chandra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

pthread_self() 函数将给出当前线程的线程ID。

 pthread_t pthread_self(void);

pthread_self() 函数返回调用线程的 Pthread 句柄。 pthread_self() 函数不返回调用线程的整体线程。您必须使用 pthread_getthreadid_np() 返回线程的完整标识符。

笔记:

 pthread_id_np_t   tid;
tid = pthread_getthreadid_np();

比这些调用快得多,但提供相同的行为。

 pthread_id_np_t   tid;
pthread_t         self;
self = pthread_self();
pthread_getunique_np(&self, &tid);

原文由 Abhitesh khatri 发布,翻译遵循 CC BY-SA 3.0 许可协议

什么?该人要求特定于 Linux,以及 getpid() 的等价物。不是 BSD 或苹果。答案是 gettid() 并返回一个整数类型。您必须使用 syscall() 调用它,如下所示:

 #include <sys/types.h>
#include <unistd.h>
#include <sys/syscall.h>

 ....

 pid_t x = syscall(__NR_gettid);

虽然这可能无法移植到非 linux 系统,但 threadid 可以直接比较并且获取速度非常快。它可以像普通整数一样打印(例如用于 LOG)。

原文由 Evan Langlois 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏