0

私はプログラミングの初心者であり、スレッドの同期について疑問に思っています。

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() メソッドを提供します。

出力を希望どおりに取得するには、スレッドを同期する必要があると思いますか? それとももっと簡単な方法がありますか?

スレッド化を始めたばかりなので、目的の出力を実現する最も簡単な方法を探しています。

どんな助けでも大歓迎です。私の質問を見てくれてありがとう。

4

1 に答える 1