c# – 在多线程应用程序中无锁的Lazy加载

前端之家收集整理的这篇文章主要介绍了c# – 在多线程应用程序中无锁的Lazy加载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果两个线程同时读取此属性会发生什么?
public static HugeType HugeType
{
    get
    {
        if (tenderCache == null)
        {
            tenderCache = Config.Get<HugeType>("HugeType",null);
        }
        return tenderCache;
    }
}

我的对象是只读的,如果创建了两个实例,这并不重要.我应该在任何情况下加锁吗?

解决方法

因为你没有同步,所以可以多次调用初始化方法,即使其他线程完全完成了初始化(由于缺少内存障碍).如果您不关心多次执行初始化操作,并且总是返回相同的正确值,无论它被调用多少次,即使同时进行多次调用,代码一定会工作,即使它不会表现好

话虽如此,实际上确保初始化只做一次是很容易的,因为它已经是一个解决的问题.您可以简单地存储一个Lazy< HugeType>在你的字段中,而不是一个HugeType和Lazy将会为您处理初始化同步.

猜你在找的C#相关文章