前端之家收集整理的这篇文章主要介绍了
c# – 在多线程应用程序中无锁的Lazy加载,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果两个线程同时读取此
属性会发生什么?
public static HugeType HugeType
{
get
{
if (tenderCache == null)
{
tenderCache = Config.Get<HugeType>("HugeType",null);
}
return tenderCache;
}
}
我的对象是只读的,如果创建了两个实例,这并不重要.我应该在任何情况下加锁吗?
因为你没有同步,所以可以多次
调用初始化
方法,即使其他线程完全完成了初始化(由于缺少内存障碍).如果您不关心多次执行初始化操作,并且总是返回相同的正确值,无论它被
调用多少次,即使同时进行多次
调用,
代码一定会工作,即使它不会表现好
话虽如此,实际上确保初始化只做一次是很容易的,因为它已经是一个解决的问题.您可以简单地存储一个Lazy< HugeType>在你的字段中,而不是一个HugeType和Lazy将会为您处理初始化同步.
原文链接:https://www.f2er.com/csharp/93897.html