gpt4 book ai didi

c# - 多线程应用程序中无锁的延迟加载

转载 作者:可可西里 更新时间:2023-11-01 09:08:54 25 4
gpt4 key购买 nike

如果两个线程同时读取这个属性会怎样?

public static HugeType HugeType
{
get
{
if (tenderCache == null)
{
tenderCache = Config.Get<HugeType>("HugeType", null);
}
return tenderCache;
}
}

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

最佳答案

因为没有同步,初始化方法可能会被调用很多次,即使其他线程已经完全完成初始化(由于缺少内存屏障)也可能如此。如果您不关心多次执行初始化操作并且无论调用多少次它总是返回相同的正确值,即使同时多次调用它,那么代码肯定会工作,即使它不会表现得那么好。

话虽如此,实际上正确地确保只进行一次初始化是非常容易的,因为它已经是一个已解决的问题。您可以简单地存储 Lazy<HugeType>在你的领域而不是 HugeTypeLazy将为您处理初始化同步。

关于c# - 多线程应用程序中无锁的延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com