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

本文关键字:方案 锁定 只读 十进制 | 更新日期: 2024-09-25 09:36:11

我正在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值而出现溢出异常。

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

对不起,我的错是:预计只读场景中没有问题。在我的例子中,"X"值有惰性getter计算第一次访问时的值。所以这实际上并不是一个只读的场景。