1
C#で回帰分析を行っていて、関数値への読み取りアクセスをロックしていないときに奇妙な結果が得られます。確かに、xとyの値へのアクセスを最初にロックすると、問題が解決する可能性がありますが、なぜこれが必要なのかを知りたいのですが?それとも、私のシナリオではこれがちょっと違うのですか?この場合、失敗したコードを分離してここにも投稿することができます。10進数を使用する場合の読み取り専用シナリオでのロックが必要ですか?
OK]をので、ここで今使用するロックを削除するとき、失敗コード部:
foreach (var fv in functionValues)
{
decimal x, y;
lock(o)
{
if (!firstX.HasValue) { firstX = paramNormalizationFactorX.HasValue ? fv.X : 0; }
x = (fv.X - firstX.Value) * factorX;
y = fv.Y;
}
var xx = x * x;
var xxx = xx * x;
var xxxx = xxx * x;
}
functionValues値ペアの共有リストです。ロックしていないときは、奇妙なx値のために私は遅かれ早かれオーバーフロー例外を取得します。
投稿コードは長い道のりです。 – QiMata
このコードを実行しているスレッドの数はいくつですか? – VMAtm
私のシナリオでは、このコードを実行する4つのスレッドがありますが、それは問題ではないと思います。コンパイル可能なprogram.csを投稿します。 – user1039407