gpt4 book ai didi

c# - 使用什么代替 Interlocked.Equals

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

我有一些遗留代码使用 Interlocked.Equals 来比较值。这些值可以是两个 bool 值,也可以将一个结构数组与 null 进行比较。 Resharper 提示 Interlocked.Equals 说“通过派生类型访问类型的静态成员”。我知道 Equals 不是 Interlocked 类的成员,而是对象类的成员。比较是在线程中进行的,所以我假设原始编码器希望将比较作为原子操作进行,因此使用了 Interlocked。由于 object.Equals 不是原子的,进行这些比较的正确的、线程安全的方法是什么?请注意,大部分数据是静态的,其中一些是静态易变的。

最佳答案

您不能使整个比较原子化,但您真正感兴趣的并不是原子性。我怀疑是波动性。这就是确保当您读取一个值时,您肯定会获得最新版本,而不是看到一个在过去某个时间点有效但可能无效的值。如果您真的需要跨读取/读取/比较部分的原子性,我怀疑您将需要锁定。

你可以使用 Interlocked.CompareExchange以确保您读取的是最新值。

您是否绝对必须首先使用无锁线程?我强烈建议要么在更大的结构(例如并行扩展)之上构建,要么只对共享数据使用锁(无论如何都应尽可能避免)。

关于c# - 使用什么代替 Interlocked.Equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3290945/

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