私の最初の考えは、私がテストしたときにここでロックが機能するSpinLock
かどうかについてでしConcurrent Collections
たが、それはより高価です!
ここでのプロセスは、並列プログラミングに基づいています。そして、タスクは複数の並列で実行されています。
SpinLockバージョン中に、に似たとランダムに言うエラーが発生することがあります"Index out of range"
。
私が書いたSpinLockバージョンは、私が望んでいた仕事をすることができません。それを機能させるために何か変更を加えることはできますか?または、このケースに正確に関連するように構築されていませんか?
何か情報はありますか?
より良い代替手段はありますか?
これは私がしたことです:
lock (lckRelatz)
{
relatz.Add(st);
}
そしてここにSpinLockバージョンがあります-これは並行して実行されているメソッドの中にあります:
SpinLock spinLk = new SpinLock();
bool gotLock = false;
try
{
spinLk.Enter(ref gotLock);
relatz.Add(st);
}
finally
{
if (gotLock)
spinLk.Exit();
}