我有一个pthread_t,我想更改它的CPU相关性.问题是我使用的是glibc 2.3.2,它没有pthread_setaffinity_np().不过这没关系,因为pthread_setaffinity_np()本身就是sched_setaffinity()的包装器,可以通过传递线程ID而不是进程ID来调用它,以设置任意线程的亲和性.
BUT ... sched_setaffinity可以使用的线程id是一个OS线程id,可以从gettid()系统调用中获得.This is different from the opaque type pthread_t,gettid()将只返回current thread的线程id.我需要能够设置任意线程的CPU亲和力.
不幸的是,我无法访问pthread的私有部分,这会让我通过将pthread_t转换为struct pthread *
来窃取线程id.我想,这会更好,因为依赖私有实现甚至会带来more个麻烦.
我也读过pthread_getunique_np函数,但是它返回一个"唯一的整数标识符"——我认为它在任何形式上都不等同于OS线程id.
因此,问题是:如何从任意pthread_t获取线程ID?