【问题标题】:Thread method parameters not thread safe线程方法参数不是线程安全的
【发布时间】:2019-05-18 15:14:49
【问题描述】:

假设我有:

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 方法中的每个参数以及所有后续方法调用都保持调用它的值?

【问题讨论】:

标签: c# multithreading


【解决方案1】:

您的问题是 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 已被捕获,但它们具有本地范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2012-03-20
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多