2011-11-28 51 views
0

我希望能夠設置自己的線程ID,例如,對於我在應用程序中創建的四個線程,我想讓它們的ID爲0,1,2和3.我知道您可以使用線程局部變量併爲其分配ID。但是,由於某種原因,我不能使用線程局部變量。你可以說,將線程標識作爲參數傳遞給線程函數可以做到這一點,但是在這種情況下,你需要在線程使用的每個函數中傳遞線程標識,這當然是不可行的。設置線程ID

在谷歌上搜索了一下,發現我set_tid_address,它的名字看起來很有趣,但我不確定它是否能實現我的目的,因爲它的文檔不清楚。任何想法,如何實現這一目標?

+1

你無法控制線程ID之間映射的映射;他們受制於系統。 –

+3

難道您不能將真實的線索ID映射到您的私人線索ID嗎?設置線程ID可能會使其與現有的線程ID衝突,並會使無盡的時間有趣的調試它。 ;) –

+0

@Joachim,是的,這可以是一種方法。我已經考慮過了,但我想要一個更直接的方式。 – MetallicPriest

回答

2

PID是內核管理的,在我的內核上使用了一個pidmap_array位圖。或多或少,下一個PID將是最後一個加1(直到循環再次開始,根據需要)。除了上面建議的私人重新映射之外,你無能爲力。

+0

您的唯一有限影響 - 顯然不是您想要的 - 是更改系統上可分配的最大PID值(在2.6內核中,PID_MAX_DEFAULT)。它通常位於/ proc/sys/kernel/pid_max中。 – gnometorule

0

出於某種原因,我不能使用線程局部變量

找出原因,並消除它。

否則你正在練習「Programming by coincidence」。

+0

他可能意味着他不會使用線程本地人,例如,因爲他們不夠便攜。 –

+0

他建議使用的'set_tid_address'將會更具可移植性嗎? –

0

可能的解決方案:

  1. 傳遞一個結構,每個線程創建(通常爲指針),然後讓他們在線程ID和其他必要的屬性填補 - 它也可以用於提供參數。
  2. 有哪些你的邏輯「線程數」和「線程ID」