【发布时间】:2010-10-08 04:36:40
【问题描述】:
我有一个 pthread_t,我想更改它的 CPU 关联性。问题是我使用的是 glibc 2.3.2,它没有 pthread_setaffinity_np()。不过没关系,因为 pthread_setaffinity_np() 本身是 sched_setaffinity() 的包装器,可以通过传递线程 ID 而不是进程 ID 来调用它来设置任意线程的亲和性。
但是 ... sched_setaffinity 可以使用的线程ID 是操作系统线程ID,您可以从gettid() 系统调用中获得这种ID。 这与不透明类型pthread_t 不同,gettid() 将只返回当前线程 的线程ID。我需要能够设置任意线程的 CPU 亲和性。
不幸的是,我无法访问 pthread 的私有部分,这会让我通过将 pthread_t 强制转换为 struct pthread * 来窃取线程 ID。我猜这样会更好,因为依赖私有实现会带来更多的麻烦。
我也一直在阅读 pthread_getunique_np 函数,但是它返回一个“唯一的整数标识符”——我不认为它在任何形状或形式上都等同于操作系统线程 ID。
因此,问题是:如何从任意 pthread_t 获取线程 ID?
【问题讨论】:
标签: c linux unix pthreads system-calls