Iev*_*ida 10 .net c# multithreading thread-safety
如果两个线程同时读取此属性会发生什么?
public static HugeType HugeType
{
get
{
if (tenderCache == null)
{
tenderCache = Config.Get<HugeType>("HugeType", null);
}
return tenderCache;
}
}
Run Code Online (Sandbox Code Playgroud)
我的对象是只读的,如果创建了两个实例,则它并不重要.在任何情况下我都应该添加锁吗?
因为没有同步,所以可以多次调用初始化方法,即使其他线程完全完成初始化(由于缺少内存屏障)也是如此.如果你不关心多次执行初始化操作,它总是会返回相同的正确值,无论它被调用了多少次,即使同时多次调用它,那么代码肯定会工作,即使它不会表现得那么好.
话虽如此,实际上确保只进行一次初始化非常容易,因为它已经解决了问题.您只需Lazy<HugeType>在您的字段中存储一个而不是一个HugeType,Lazy并将为您处理初始化同步.
| 归档时间: |
|
| 查看次数: |
529 次 |
| 最近记录: |