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