我有一个pthread_t,我想改变它的CPU亲和力.问题是我使用的是glibc 2.3.2,它没有pthread_setaffinity_np().但这没关系,因为pthread_setaffinity_np()本身就是sched_setaffinity()的包装器,可以通过传递线程ID而不是进程ID来调用,以设置任意线程的关联.
但是 ...... sched_setaffinity可以使用的线程ID是一个操作系统线程ID,可以从gettid()系统调用获得.这与opaque类型pthread_t不同,gettid()只返回当前线程的thread-id .我需要能够设置任意线程的CPU亲和性.
不幸的是,我无法访问pthread的私有部分,这会让我通过将pthread_t转换为a来窃取线程ID struct pthread *.我想,更好的是,因为依赖私有实现需要更多麻烦.
我也一直在阅读pthread_getunique_np函数,但是这会返回一个"唯一的整数标识符" - 我认为它不会以任何形式或形式等同于OS线程ID.
因此,问题是:如何从任意pthread_t获取线程ID?
我在POSIX/Linux环境中有一个多线程应用程序 - 我无法控制创建pthreads的代码.在某些时候,进程 - pthreads的所有者 - 收到一个信号.
该信号的处理程序应该中止,取消或停止所有pthread并记录运行的pthreads数量.
我的问题是我找不到如何列出正在运行的所有pthread.