首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pthread_self()和gettid()之间有什么区别?我应该用哪一种?

pthread_self()和gettid()之间有什么区别?我应该用哪一种?
EN

Stack Overflow用户
提问于 2011-06-16 12:49:46
回答 2查看 25.7K关注 0票数 28

我试图在Linux上设置线程的CPU亲和力。我想知道建议采用下列哪一种方法:

  1. 使用pthread_self()获取线程id 使用pthread_setaffinity_np(.)设置CPU关联通过将线程id作为参数传递
  2. 使用gettid()调用获取线程id 使用sched_setaffinity(.)设置CPU关联通过在进程id的位置传递线程id

P.S:在设置CPU关联之后,我打算增加线程的调度优先级。

EN

回答 2

Stack Overflow用户

发布于 2011-06-16 13:05:17

,他们不是同一个。下面是我从TLPI收集到的一些数据(我找不到一个足够大的块来完全描述这一点)。如果你匆匆忙忙的话,你可能只想要最后一部分。

gettid

Linux2.4引入了一个新的系统调用gettid(),允许线程获得自己的线程ID。

线程组中的每个线程由唯一的线程标识符来区分。线程ID使用与进程ID pid_t相同的数据类型表示。线程ID在系统范围内是唯一的,内核保证任何线程ID都不会与系统上的任何进程ID相同,除非线程是进程的线程组领导。

pthread_self

进程中的每个线程都由一个线程ID唯一地标识。一个线程可以使用pthread_self()获得自己的ID。

需要使用pthread_equal()函数来比较线程ids,因为必须将pthread_t数据类型视为不透明数据

在Linux线程实现中,线程In跨进程是唯一的。但是,在其他实现中并不一定如此,SUSv3明确指出,应用程序不能移植地使用线程ID来标识另一个进程中的线程。

gettidpthread_self

POSIX线程ID与Linux特定的gettid()系统调用返回的线程ID不一样。POSIX线程ID由线程实现分配和维护。gettid()返回的线程ID是一个由内核分配的数字(类似于进程ID)。

我会和pthread_setaffinity_np一起去,但是要知道手册上写着:

这些函数是在sched_setaffinity(2)之上实现的。

票数 23
EN

Stack Overflow用户

发布于 2012-12-28 13:11:17

我相信,gettid()只作为系统调用存在,并且没有作为API调用直接公开,这意味着“只有当您完全确定所做的事情时才使用它”,而gettid()并不意味着是可移植的。

如果你坚持pthread,你应该会更好。以后可以使用pthread_setschedparam()更改调度策略/优先级。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6372102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档