我想充分了解如何創建單獨線程調用一個類實例的同樣的方法可以在該方法實現的局部變量。多線程共享本地變量
例如我有一個單一的方法(劃分)的一類
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