2016-11-19 150 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

相關問題