2016-11-19 101 views
0

有人告诉我,我可以得到pthread相对于其他pthreads(0,1,2等)的索引。获取pthread的索引而不将其作为参数传递给函数。

然而同时使用

pthread_t id = pthread_self(); 
uint64_t tid; 

pthread_threadid_np(NULL, &tid); 

给出以下。 (例如,具有4个并行线程)

2134955 
2134954 
2134956 
2134957 

232833024 
232296448 
233369600 
233906176 

我希望得到在这种情况下,并行线程(0,1,2,3)的索引。这可能没有将它作为参数发送到pthread函数?谢谢您的帮助。

回答

1

没有这样的索引。

所有的可移植的是由pthread_self()返回的pthread_t,它甚至不一定是整数类型,并且如果它确实不必以任何特定顺序进行分配。

如果你想要一个从零开始的整数索引,你需要自己分配它。但是,它不一定是线程函数的参数 - 您可以拥有一个受互斥锁保护的全局计数器,每个线程都可以为该计数器分配一个ID并将其递增。

+0

'pthread_t'不一定是算术类型;指针是通用/合理的,实际上它甚至可以是聚合类型('struct')。 –

+0

@R:啊,我正在阅读旧版本的POSIX,这个修改是在第6期中做出的。 – caf

相关问题