2011-11-28 108 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”