私はプログラミングの初心者であり、スレッドの同期について疑問に思っています。
CPUコアごとにスレッドを作成し、指定された回数だけメソッドを実行する必要があるWinFormsプログラムがあります。
ネストされたループでスレッドをセットアップして実行していますが、出力は次のようになります。
thread: 0, run: 1, time: xxx
thread: 1, run: 1, time: xxx
thread: 2, run: 1, time: xxx
thread: 3, run: 1, time: xxx
thread: 1, run: 2, time: xxx
thread: 2, run: 2, time: xxx
などしかし、出力に次のようにデータを表示したい:
thread: 0, run: 1, time: xxx
thread: 0, run: 2, time: xxx
thread: 0, run: 3, time: xxx
thread: 1, run: 1, time: xxx
thread: 1, run: 2, time: xxx
thread: 1, run: 3, time: xxx
等
私のフォームでは、スレッドを作成し、別のクラスからメソッドを呼び出します。
SomeClass[] thisArray = new SomeClass[numThreads];
for (int runNumber = 1; runNumber <= numberOfRuns; runNumber++)
{
for (int i = 0; i < numThreads; i++)
{
thisArray[i].mThread = new Thread(thisArray[i].StartMethod);
thisArray[i].mThread.Start();
thisArray[i].mThread.Join();
//Display thread id and number of runs
this.tBoxW.AppendText(string.Format("") + Environment.NewLine);
this.tBoxW.AppendText(string.Format("Thread Id: ") + i.ToString() +
Environment.NewLine);
this.tBoxW.AppendText(string.Format("Number of Runs {0}", numberOfRuns) +
Environment.NewLine);
}
}
SomeClass は SomeClass.cs にあり、一連の方程式を実行する StartMethod() メソッドを提供します。
出力を希望どおりに取得するには、スレッドを同期する必要があると思いますか? それとももっと簡単な方法がありますか?
スレッド化を始めたばかりなので、目的の出力を実現する最も簡単な方法を探しています。
どんな助けでも大歓迎です。私の質問を見てくれてありがとう。