我想充分了解如何创建单独线程调用一个类实例的同样的方法可以在该方法实现的局部变量。多线程共享本地变量
例如我有一个单一的方法(划分)的一类
public class Maths
{
public int Num1;
public int Num2;
public void Divide()
{
for (long i = 0; i < 100000; i++)
{
Num1 = 2;
Num2 = 2;
int result = Num1/Num2;
Num1 = 0;
Num2 = 0;
}
}
}
两个线程被实例化并称为划分方法如下:
static void Main(string[] args)
{
Maths m = new Maths();
Task t1 = new Task(() => m.Divide());
Task t2 = new Task(() => m.Divide());
List<Task> tl = new List<Task> { t1, t2 };
Parallel.ForEach(tl, task => task.Start());
Console.ReadLine();
}
}
有时,这种代码运行正常。但是其他时间它将引发就行了dividebyzero错误:
INT结果= NUM1/NUM2;
我的假设是,一个线程被重置NUM1和NUM2零其他线程调用NUM1/NUM2之前。因此造成零除异常。
这将使意义,我应该用一个锁,但我不明白如何将这些局部变量NUM1和NUM2是在线程之间共享,因为我的理解是,局部变量不是线程之间共享?
谢谢,现在有道理。 – selams