gpt4 book ai didi

c# - ReadOnlyCollections and Threads - 这段代码安全吗?

转载 作者:行者123 更新时间:2023-11-30 20:04:04 25 4
gpt4 key购买 nike

我有一个具有 ReadOnlyCollection 的重线程应用程序,如下所示:

internal static ReadOnlyCollection<DistributorBackpressure44> DistributorBackpressure44Cache
{
get
{
return _distributorBackpressure44;
}
set
{
_distributorBackpressure44 = value;
}
}

我在应用程序中有一个地方替换了这个集合(总是在一个单独的线程上),它看起来像这样:

    CicApplication.DistributorBackpressure44Cache = new ReadOnlyCollection<DistributorBackpressure44>(someQueryResults.ToList());

我在代码中有很多地方访问这个集合,通常是通过 Linq 查询,在许多不同的线程中。代码通常看起来像这样:

foreach (DistributorBackpressure44 distributorBackpressure44 in CicApplication.DistributorBackpressure44Cache.Where(row => row.Coater == coater && row.CoaterTime >= targetTime).ToList())
{
...
...
}

我假设我正在做的事情是线程安全的,不需要做任何锁定?我不确定的是,如果上面的查询恰好发生在集合在不同线程中被替换的同一时间,会发生什么情况?

最佳答案

引用分配是原子的,所以是的,它是线程安全的。但前提是您不依赖数据在写入后立即准备好读取。这是因为有缓存,您可能想加入一个 volatile 来防止这种情况发生。

另见 reference assignment is atomic so why is Interlocked.Exchange(ref Object, Object) needed? .

关于c# - ReadOnlyCollections and Threads - 这段代码安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632331/

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