如何制作具有连续id的线程

时间:2013-09-09 00:42:28

标签: c# multithreading

当我创建它们时,我需要为某些线程分配连续的ID,并且无论起始ID是什么(如11,12,13,...或9,10,11)

这就是我所做的,在这里我创建4个线程并调用My_function()

for ( byte i = 0 ; i < 4 ; i++ )
    {
     myThreadArray[i] = new Thread(new ParameterizedThreadStart(My_function));
     myThreadArray[i].Start(i);
    }

它似乎有效但我可以保证我总是为它们分配连续的ID

2 个答案:

答案 0 :(得分:5)

由于您使用数组来包含线程,因此该数组的每个顺序分配的元素都将具有顺序索引。

但是,如果需要将线程ID映射到MyThreadArray中的元素,因为在创建线程时无法控制线程ID(只有线程Name ),您可以使用Dictionary<int, int>将实际线程ID映射到MyThreadArray索引

for ( byte i = 0 ; i < 4 ; i++ )
    {
     myThreadArray[i] = new Thread(new ParameterizedThreadStart(My_function));
     myThreadArray[i].Start(i);
     MyThreadDictionary.Add(MyThreadArray[i].ManagedThreadId(), i)
    }

并通过以下方式访问它:

logSet[MyThreadDictionary(System.Threading.Thread.CurrentThread.ManagedThreadId)]

或使用Array.FindIndex以相同的方式检索包含与您要匹配的线程ID匹配的线程的MyThreadArray元素的索引。

答案 1 :(得分:2)

您应该使用Name属性,以便跟踪...

http://msdn.microsoft.com/en-us/library/system.threading.thread.name.aspx

for ( byte i = 0 ; i < 4 ; i++ )
{
 myThreadArray[i] = new Thread(new ParameterizedThreadStart(My_function));
 myThreadArray[i].Start(i);
 myThreadArray[i].Name = i.ToString();
}

您可以像这样访问当前线程:

logSet[Convert.ToInt32(System.Threading.Thread.CurrentThread.Name) % numOfThreds]