私はParallel.ForEach
一般的にC#、、、および.NETを初めて使用します。何千もの場所を含む検索を並列化したい。場所ごとに、大圏距離を計算します。それは私がさまざまなコアに広げたい計算です。私の質問は、このMSDN TPLの例のように、スレッドローカル変数が1つしかない場合、どうすればよいですか?結果として、私は、、、、、、およびそのオプションを確認しましたが、同等性を追加、インクリメント、デクリメント、またはテストしているだけではありません。並行して実行されている複数のスレッドで、全体的に最も短いオブジェクトを返したいInterlocked
Add
CompareExchange
Decrement
Exchange
Increment
Read
距離。私の腸は、これは簡単で、距離をラップする小さなオブジェクトを作成できるはずだと言っていますがLocation
、各スレッドから最良の答えを取得して、それらの中から最短距離を選択するにはどうすればよいですか?非並列バージョンは次のとおりです。
Location findClosestLocation(Location myLocation, List<Location> allLocations)
{
double closest = double.MaxValue;
Location closestLoc = null;
foreach (Location aLoc in allLocations)
{
if (aLoc != myLocation)
{
double d = greatCircle(myLocation, aLoc);
if (d < closest)
{
closest = d;
closestLoc = aLoc;
}
}
}
return closestLoc;
}
良いアドバイスを提供しているように見えるDDJブログ投稿を見ましたが、それが最良のアドバイスであるかどうか疑問に思いました。著者が配列をループしているのを見て、これを行うためのより機能的な方法はないのだろうかと思います。機能の世界では、、、を使用しmap
ます。lambda
min