5

当我创建它们时,我需要为某些线程分配连续的 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

4

2 回答 2

5

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

但是,如果您需要将 Thread ID 映射到 in 的元素MyThreadArray,因为在创建线程时您无法控制 thread IDs(只有 thread Name),您可以使用 aDictionary<int, int>将实际的 thread IDs 映射到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检索MyThreadArray包含与您要匹配的线程 ID 匹配的线程的元素的索引,方式大致相同。

于 2013-09-09T01:05:16.470 回答
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]
于 2013-09-09T00:47:06.950 回答