C#为同一方法定义多个线程

时间:2018-01-18 07:40:33

标签: c# multithreading class

我使用下面的代码使用相同的方法初始化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。

任何人都可以解释这种行为或建议更好的方法吗?

1 个答案:

答案 0 :(得分:2)

每个帖子都有一个分配给它的唯一ID。您可以使用

访问它
Thread.CurrentThread.ManagedThreadId

属性。

您获得重复/缺失数字的原因是每次都可能发生上下文切换。例如,想象一下,你的线程逐行逐行执行。第一个线程将其threadID变量分配给_threadInitCount,即0.然后第二个线程执行相同的操作,其threadID也为0。然后第三个获取其threadID = 0,依此类推。然后第一个线程再次打开以将_threadInitCount增加到1,然后第二个线程将其增加到2,依此类推。