我试图在Linux上设置线程的CPU亲和力。我想知道建议采用下列哪一种方法:
P.S:在设置CPU关联之后,我打算增加线程的调度优先级。
发布于 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来标识另一个进程中的线程。
gettid
对pthread_self
POSIX线程ID与Linux特定的gettid()
系统调用返回的线程ID不一样。POSIX线程ID由线程实现分配和维护。gettid()
返回的线程ID是一个由内核分配的数字(类似于进程ID)。
我会和pthread_setaffinity_np
一起去,但是要知道手册上写着:
这些函数是在sched_setaffinity(2)之上实现的。
发布于 2012-12-28 13:11:17
我相信,gettid()
只作为系统调用存在,并且没有作为API调用直接公开,这意味着“只有当您完全确定所做的事情时才使用它”,而gettid()
并不意味着是可移植的。
如果你坚持pthread
,你应该会更好。以后可以使用pthread_setschedparam()
更改调度策略/优先级。
https://stackoverflow.com/questions/6372102
复制相似问题