public class ThreadingIssue
{
int accum;
public void Squaring(int x)
{
// Creates a random pause to check for thread
int pauseFor = rnd.Next(1, 10);
Thread.Sleep(pauseFor);
accum += x*x;
}
public void DoSquaring()
{
accum = 0;
for (int i = 1; i <= 100; i++)
{
threads.Add(new Thread(() => Squaring(i)));
threads[i - 1].Start();
}
}
本質的に私は答えとして毎回338350を得たいと思っていましたが、明らかにスレッドの問題がありません。そのようACCUM変数をロックし、その後C#基本的なマルチスレッドの問題 - 競合状態を解決するためにロックを使用する方法
private System.Object lockThis = new System.Object();
と::
lock (lockThis)
{
accum += x*x;
}
しかし、これで問題が解決しない私のようなオブジェクトを作成しようとしました。私は何が間違っている/間違っていますか?
なぜ配列内のスレッドへの参照を保持していますか? – Enigmativity