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将会为您处理初始化同步. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |