for (int i = 0; i < 10; i++)
new Thread (() => Console.Write (i)).Start();
正如預期的那樣,上面的代碼的輸出是不確定的,因爲變量i是指相同的存儲器位置在整個循環的壽命。因此,每個線程,因爲它正在運行傳遞數據到使用lambda線程表達式
然而,
for (int i = 0; i < 10; i++)
{
int temp = i;
new Thread (() => Console.Write (temp)).Start();
}
還正在非確定性輸出上,其值可以改變一個變量調用Console.Write!我認爲每個循環迭代的變量temp都是局部的。因此,每個線程都捕獲了不同的內存位置,應該有np問題。
輸出的非確定性性質是什麼? – phoog
第二個版本應該可以工作 - Eric Lippert在這裏發表了關於閉環變量的閉包:http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered -harmful.aspx – Paolo
它不應該是「確定性的」,因爲「線程調度的順序總是相同的」。也許這就是問題的含義? –