我使用下面的代码使用相同的方法初始化4个线程,以便每个线程可以在单独的文件上执行相同的过程。
for (int i = 0; i < 4; i++)
{
Thread newProcessThread = new Thread(ThreadProcessFile)
{
Priority = ThreadPriority.BelowNormal,
IsBackground = true
};
newProcessThread.Start();
}
在ThreadProcessFile方法中,它以这样的方式启动,因此每个线程都知道它的ID是什么。 _threadInitCount
在同一个类中声明。
int threadID = _threadInitCount;
_threadInitCount += 1;
然而,我得到了一个奇怪的行为,其中一个数字可能会被遗漏或重复。例如第一个线程的ID可能为1,而且四个线程的集合中不会丢失0或2。
任何人都可以解释这种行为或建议更好的方法吗?
答案 0 :(得分:2)
每个帖子都有一个分配给它的唯一ID。您可以使用
访问它Thread.CurrentThread.ManagedThreadId
属性。
您获得重复/缺失数字的原因是每次都可能发生上下文切换。例如,想象一下,你的线程逐行逐行执行。第一个线程将其threadID变量分配给_threadInitCount,即0.然后第二个线程执行相同的操作,其threadID也为0。然后第三个获取其threadID = 0,依此类推。然后第一个线程再次打开以将_threadInitCount增加到1,然后第二个线程将其增加到2,依此类推。