多くの浮動小数点数の計算を行うマルチスレッドをアプリケーションに実装しようとしています(ニューラルネットワーク)。
必要な計算を行い、その関数の外で配列を更新する関数を作成しました。私の実際のシングルスレッドコードは次のようになります(理解を深めるために簡略化されています)。
class MyClass
{
// this array after all calculations should contain
// result of only one calculation,
// that returned smallest value in one of array fields
// (smallest neural network error)
float[] bestResult;
// runs calculations on all "sets of data"
public void findBestResult(void)
{
foreach (something...) // data rows from database cached in one array
{
calculate(x[]);
}
}
// calculates one "set of data"
public void calculateAndUpdateResultIfBetter(float[] inputData)
{
if (bestResult[0] > calculatedData[0])
bestResult = calculatedData; // update only if condition is true
}
}
低レベルのプログラマーですが、Synchronizeなどを使用する高度な(?).NETスレッド手法の使用方法がわかりません。デリゲートを使用して、何かに追加のスレッドを1つ作成し、フォームのコントロールを更新する方法を知っています。
2〜8個のスレッドでまったく同じことを行い、互いに競合する方法がわかりません。
質問1は-これで私を助けてくれませんか?どうやって始めたらいいのかわからない。ニコ・ドラシュコビッチが解決
編集:質問2は-lock()メソッドは読み取りと書き込みのために配列をロックしますか?