线程方法参数不是线程安全的

时间:2019-05-18 15:14:49

标签: c# multithreading

让我说:

private void MyMethod()
{
    for (int a = 0; a < 10; a++)
    {
        for (int b = 0; b < 10; b++)
        {
            Thread thread = new Thread(() => MyThread(a, b));
            thread.Start();
        }
    }
}
private void MyThread(int a, int b)
{
    MoreMethods(a, b);
}

如何使此线程安全,即确保MyThread方法中的每个参数以及所有后续方法调用均保持被其调用的值?

1 个答案:

答案 0 :(得分:3)

您的问题是ab被lambda捕获。

只需复制:

for (int a = 0; a < 10; a++)
{
    for (int b = 0; b < 10; b++)
    {
        int a2 = a, b2 = b;
        Thread thread = new Thread(() => MyThread(a2, b2));
        thread.Start();
    }
}

现在捕获了a2b2,但是它们具有本地作用域。