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.
Buchungscode würde einen langen Weg gehen. – QiMata
Wie viele Threads laufen diesen Code? – VMAtm
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