我在C#中做了一些回归分析,并且在没有锁定对函数值的读访问时得到了奇怪的结果。当然,在阅读它们时最初锁定对x和y值的访问可以解决问题,但我想知道为什么这似乎是必要的?或者这只是我的情景中的不当行为?在这种情况下,我可以隔离失败的代码并在此处发布。
好的,现在这里代码部分失败了,当删除使用过的锁时:
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 :(得分:0)
抱歉,我的错:预计在只读方案中没有问题。在我的例子中," X" -values有懒惰的getter计算第一次访问时的值。所以这实际上只是一个只读的场景。