10 個のスレッドを作成し、メッセージをコンソールに書き込む次のコードがあります。
for (int i = 0; i < 10; i++)
{
{
Thread thread = new Thread((threadNumber) =>
{
for (int j = 0; j < 10; j++)
{
Thread.Sleep(200);
Console.WriteLine(string.Format("Thread: {0}, Line: {1}", threadNumber, j));
}
});
thread.Start(i);
}
}
私の理解ではParameterizedThreadStart
、参照のコピーがスレッドに送信されるオブジェクトを取得します。その場合、i
各ループ内でローカル コピーを作成していないため、すべての新しいスレッドが同じメモリ位置を指すことになり、特定のスレッド番号が「見逃される」可能性があります。ただし、これを実行すると (さらに多数のスレッド/スリープ時間に対しても)、 の各値にi
は独自のスレッドがあります。誰でも理由を説明できますか?