我需要实现(伪代码)一种新类型的 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 对象来实现,并且实现应该是无等待和可线性化的。
提前致谢!