C 设置线程ID
我希望能够设置自己的线程ID,例如,对于我在应用程序中创建的四个线程,我希望它们的ID为0、1、2和3。我知道可以使用线程局部变量并为其分配ID。但是,由于某些原因,我不能使用线程局部变量。您可以说,将线程ID作为参数传递给线程函数可以做到这一点,但在这种情况下,您需要在线程使用的每个函数中传递线程ID,这当然是不可行的C 设置线程ID,c,linux,gcc,x86,C,Linux,Gcc,X86,我希望能够设置自己的线程ID,例如,对于我在应用程序中创建的四个线程,我希望它们的ID为0、1、2和3。我知道可以使用线程局部变量并为其分配ID。但是,由于某些原因,我不能使用线程局部变量。您可以说,将线程ID作为参数传递给线程函数可以做到这一点,但在这种情况下,您需要在线程使用的每个函数中传递线程ID,这当然是不可行的 在谷歌上搜索一下,我发现了set_tid_address,它的名字看起来很有趣,但我不确定它是否能达到我的目的,因为它的文档不清楚。任何想法,如何实现这一点?PID是内核管理的
在谷歌上搜索一下,我发现了set_tid_address,它的名字看起来很有趣,但我不确定它是否能达到我的目的,因为它的文档不清楚。任何想法,如何实现这一点?PID是内核管理的,在我的内核上使用pidmap_数组位图。或多或少,下一个PID将是最后一个增加1的PID(直到根据需要循环返回开始)。除了上面建议的私有重新映射之外,您对此无能为力 由于某些原因,我不能使用线程局部变量 找出原因,并消除它 否则,您正在练习。可能的解决方案:
您无法控制线程ID;它们是由系统控制的。你不能将真实的线程id映射到你的私有线程id吗?设置线程id可能会使它与现有的线程id冲突,并会使调试它变得无穷无尽@约阿希姆,是的,这可能是一种方式。我已经考虑过了,但是我想要一种更直接的方法。将它传递给每个函数有什么不对?无论如何,您很可能需要将某种上下文结构传递给该线程中涉及的所有函数。特别是因为你不能使用线程局部变量。他可能意味着他不会使用线程局部变量,因为,例如,它们的可移植性不够。而且他建议使用的
set_tid_address
将更具可移植性?您唯一有限的影响——这显然不是您想要的——是更改系统上可分配的最大PID值(在2.6内核中,PID_MAX_默认值)。它通常位于/proc/sys/kernel/pid_max中。