2016-04-18 7 views
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値のために私は遅かれ​​早かれオーバーフロー例外を取得します。

+0

投稿コードは長い道のりです。 – QiMata

+0

このコードを実行しているスレッドの数はいくつですか? – VMAtm

+0

私のシナリオでは、このコードを実行する4つのスレッドがありますが、それは問題ではないと思います。コンパイル可能なprogram.csを投稿します。 – user1039407

答えて

0

申し訳ありませんが、私のせいです。読み取り専用のシナリオでは問題はありません。私の場合、 "X"値は、最初のアクセスでの値を怠けたゲッター計算値でした。だからこれは実際には読書だけのシナリオではありませんでした。

関連する問題