1

我需要实现(伪代码)一种新类型的 compare&swap(a,b) (CAS) 对象(我们称之为新类型 CAS2)。

CAS 和 CAS2 对象都支持返回对象值的读取操作。

它们都支持 compare&swap(a,b) 操作,但是在 CAS 上,此操作返回 true/false,如果它等于 a,则将对象值更改为 b,在 CAS2 上,此操作具有相同的效果,但不是返回 true /false,它应该总是在操作之前返回对象值。

例如:

如果 CAS 对象的值为 4,compare&swap(4,5) 将返回 true 并将值更改为 5,但在 CAS2 对象上,compare&swap(4,5) 将返回 4 并将值更改为 5。如果 CAS 对象值为 4,那么 compare&swap (5,6) 将返回 false 并且什么都不做,但在 CAS2 上 compare&swap (5,6) 将返回 4 并且什么也不做。CAS2 对象应该只使用一个 CAS 对象来实现,并且实现应该是无等待和可线性化的。

提前致谢!

4

1 回答 1

1

您要求的变体实际上是主流变体。在没有互斥锁的情况下实现这样的指令需要硬件支持,例如专用指令。有关更多详细信息,请参阅有关该主题的维基百科文章

于 2013-03-05T03:33:50.207 回答