使用十进制时,在只读方案中需要锁定?

时间:2016-04-18 09:23:31

标签: c# multithreading

我在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值,我迟早会得到溢出异常。

1 个答案:

答案 0 :(得分:0)

抱歉,我的错:预计在只读方案中没有问题。在我的例子中," X" -values有懒惰的getter计算第一次访问时的值。所以这实际上只是一个只读的场景。