由于
pthreads不需要使用Linux线程(就此而言,根本不需要内核线程)来实现,并且某些实现完全是用户级别的或混合的,因此
pthreads接口不提供访问这些实现细节的功能。不可移植(甚至跨
pthreadLinux的各种实现)。使用那些线程库可以提供它作为扩展,但似乎没有任何作用。
除了访问线程库的内部数据结构(您不希望这样做,尽管假设您具有处理器亲缘关系和Linux线程ID,但您的代码无论如何都不能移植),您也许可以在创建时发挥作用,如果您控制创建线程的代码:
提供
pthread_create()一个调用函数
gettid()(
syscall由于您不一定总是通过导出宏,因此您可能必须直接使用该宏
libc),将结果存储在某个位置,然后调用原始的输入函数。如果你有相同的入口函数的多个线程,你可以传递一个递增的指针到一个数组
arg参数
pthread_create,然后将传递到您创建的存储线程ID的入口函数,存放
pthread_t的返回值
pthread_create在相同的顺序,然后您将能够根据给定的
pthread_t值查找创建的所有线程的Linux线程ID
。
此技巧是否值得,取决于您所设置的CPU亲和力的重要性,而不是不访问线程库的内部结构,或者取决于提供的线程库
pthread_setaffinity_np。



