Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
以下语句(与第一个和第三个参数寻址相同的变量)是否总是导致变量 b 在完成时获取变量 c 的值,或者另一个线程是否有可能在获取参数时更改一个或多个参数导致第一个第三个参数在比较操作期间包含不同的值?
a = Interlocked.CompareExchange(ref b, c, b)
这是一个有趣的问题;我怀疑答案是“不能保证”,仅仅是因为字段的值可以在ldfld(最终参数)之后但在通过地址评估之前(之前通过 获得ldflda)进行微不足道的更改,但这主要是学术性的,就像这样的线程代码,重要的是做一些明显正确的事情。
ldfld
ldflda
显然,“不能保证”不会让我们确定太多,所以没有用。如果我们想要“保证”的答案,那么问题就变得没有意义了,因为简单地使用Interlocked.Exchange.
Interlocked.Exchange