for (int i = 0; i < 10; i++)
new Thread (() => Console.Write (i)).Start();
予想どおり、上記のコードの出力は非決定論的です。これは、i 変数がループの存続期間を通じて同じメモリ位置を参照するためです。したがって、各スレッドは、実行中に値が変化する可能性のある変数に対して Console.Write を呼び出します。
でも、
for (int i = 0; i < 10; i++)
{
int temp = i;
new Thread (() => Console.Write (temp)).Start();
}
また、非決定論的な出力を提供しています! 変数 temp は各ループ反復にローカルであると考えました。したがって、各スレッドは異なるメモリ位置をキャプチャし、np 問題が発生するはずでした。