c - pthread_self() 和 gettid() 返回值之间的差异

标签 c linux multithreading multiprocessing

根据我的理解,gettid()返回的TID(thread id)在一个进程中(或者在一个多进程的程序中,而每个进程可能有多个线程),即在一个进程内,不同的线程有不同的线程id。

pthread_self()返回的TID在进程间是唯一的,即在同一台机器上,不同的线程有不同的TID同时在同一台机器上。

我的理解对不对?

另外,线程如何获取其派生线程的TID(对应于gettid())? 谢谢!

最佳答案

为了在 Linux 上为这个问题添加一些实现上下文:

  1. gettid() 返回一个对应于线程在内核进程调度程序中的条目的值(与 getpid() 被认为的非常相似)。这是可以设置调度优先级和相关性的东西。

  2. pthread_self() 返回指向进程内存映射中调用线程的 TLS(线程本地存储)槽附近的指针。显然,根据 TLS 的定义,这个值在给定进程中是唯一的(并且可以映射到内核 TID 并返回),但它不可能在系统范围内是唯一的,因为每个进程都有相同的虚拟地址范围。

关于c - pthread_self() 和 gettid() 返回值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610332/

相关文章:

c++ - 产生线程是否自己提供内存顺序保证?

c - C 中的链表

c++ - 如果您链接到目标文件但不使用其任何代码,会发生什么情况?

c++ - linux下Deezer原生API : Unanble to create simple app

linux - 如何使用eval读取变量

Android:如何使用后台线程?

c# - 没有调用BackgroundWorker

C - 返回数组作为函数参数

c - 当用户输入 double 值时出现错误

linux - 干净的Redhat上的MongoDB "service"无法启动