加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:44:04 所属栏目:百科 来源:网络整理
导读:如果两个线程同时读取此属性会发生什么? public static HugeType HugeType{ get { if (tenderCache == null) { tenderCache = Config.GetHugeType("HugeType",null); } return tenderCache; }} 我的对象是只读的,如果创建了两个实例,这并不重要.我应该在任
如果两个线程同时读取此属性会发生什么?
public static HugeType HugeType
{
    get
    {
        if (tenderCache == null)
        {
            tenderCache = Config.Get<HugeType>("HugeType",null);
        }
        return tenderCache;
    }
}

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读