我继承了一些代码,这些代码具有一组通过在单独线程上运行的串行链接捕获的实时值:
class Data
{
public static int nFooCount;
public static decimal meanValue;
// Lots more of a variety of types.
}
线程只是将数据存储到没有锁定或其他同步的字段中。对我来说,这看起来像是一大堆比赛条件。所以我想给它增加一些安全性。问题是,什么是最好的?
我可以使 int 字段不稳定。但是,不能用十进制类型做到这一点。互锁可以帮助解决这个问题,尽管很混乱,使用拳击。或者我可以添加一个锁定对象
private static readonly object lockObj = new object();
然后访问所有内容。但这会锁定所有字段,即使它一次只修改一个字段。我不能锁定原语,这无论如何都是不好的形式,为每个字段添加一个锁定对象看起来很浪费。那么有没有更好的方法呢?