2016-04-18 5 views
1

Ich mache eine Regressionsanalyse in C# und bekomme seltsame Ergebnisse, wenn ich den Lesezugriff auf meine Funktionswerte nicht sperre. Sicher, das anfängliche Sperren des Zugriffs auf die X- und Y-Werte beim Lesen könnte das Problem lösen, aber ich würde gerne wissen, warum dies notwendig zu sein scheint. Oder ist das nur ein Fehlverhalten in meinem Szenario? In diesem Fall könnte ich den fehlerhaften Code isolieren und auch hier posten. Sperren in schreibgeschützten Szenarios erforderlich, wenn dezimal verwendet wird?

Ok, also hier nun der Code Teil versagt, wenn die verwendete Sperre zu entfernen:

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 ​​ist eine gemeinsame Liste von Wertepaaren. Wenn ich nicht sperre, bekomme ich früher oder später wegen seltsamer x-Werte eine Überlauf-Ausnahme.

+0

Buchungscode würde einen langen Weg gehen. – QiMata

+0

Wie viele Threads laufen diesen Code? – VMAtm

+0

In meinem Szenario gibt es 4 Threads, die diesen Code ausführen - aber das spielt keine Rolle. Ich werde ein kompilierbares Programm veröffentlichen. – user1039407

Antwort

0

Entschuldigung, meine Schuld: erwartungsgemäß gibt es kein Problem in einem schreibgeschützten Szenario. In meinem Fall hatten die "X" -Werte faule Getter, die den Wert beim ersten Zugriff berechneten. Also das war eigentlich nicht nur ein Lese-Szenario.

Verwandte Themen