2

以下语句(与第一个和第三个参数寻址相同的变量)是否总是导致变量 b 在完成时获取变量 c 的值,或者另一个线程是否有可能在获取参数时更改一个或多个参数导致第一个第三个参数在比较操作期间包含不同的值?

a = Interlocked.CompareExchange(ref b, c, b)
4

1 回答 1

2

这是一个有趣的问题;我怀疑答案是“不能保证”,仅仅是因为字段的值可以在ldfld(最终参数)之后但在通过地址评估之前(之前通过 获得ldflda)进行微不足道的更改,但这主要是学术性的,就像这样的线程代码,重要的是做一些明显正确的事情。

显然,“不能保证”不会让我们确定太多,所以没有用。如果我们想要“保证”的答案,那么问题就变得没有意义了,因为简单地使用Interlocked.Exchange.

于 2013-06-14T22:34:22.603 回答