複数のスレッドを起動すると、解析中のパラメータid
が間違っていることがあります。ここに私のスタートアップは、次のとおりです。スレッドパラメータが変更されています
for (int i = 0; i < _threadCount; i++)
{
Thread thread = new Thread(() => WorkerThread(i));
thread.Start();
_threads.Add(thread);
}
そして、私のスレッド関数:
private void WorkerThread(int id)
{
Console.WriteLine("[{0}] Thread started {1}", DateTime.Now.ToLongTimeString(), id);
}
このコードの出力は次のとおりです。
私の心には、このコードが持つすべてのスレッドを作成する必要があります[19:10:54] Thread start 3
[19:10:54] Thread start 9
[19:10:54] Thread start 4
[19:10:54] Thread start 12
[19:10:54] Thread start 11
[19:10:54] Thread start 3
[19:10:54] Thread start 12
[19:10:54] Thread start 6
[19:10:54] Thread start 9
[19:10:54] Thread start 6
[19:10:54] Thread start 13
[19:10:54] Thread start 2
[19:10:54] Thread start 15
[19:10:54] Thread start 9
[19:10:54] Thread start 15
上記のように重複ではなくユニークなid
です。
コンパイラ情報:
プラットフォームターゲット:x64の
ターゲットフレームワーク:.NET Frameworkの4.5
すべてのスレッドが同じ変数を共有しています。 – SLaks
誰かが実際に似たような質問を投稿しましたが、ここではその件に関するエリック・リッペルトのリンク記事があります。面白いです。http://ericlippert.com/2009/11/12/closing-over-the-loop-variable-considered-harmful-part-one/ – KDecker