【发布时间】:2013-03-03 19:12:22
【问题描述】:
我需要实现(伪代码)一种新型的 compare&swap(a,b) (CAS) 对象 (我们称新类型为 CAS2)。
CAS 和 CAS2 对象都支持返回 对象值。
它们都支持 compare&swap(a,b) 操作,但在 CAS 上 此操作返回 true/false 并将对象值更改为 b if 它等于a,在CAS2上这个操作有同样的效果,但是 而不是返回真/假,它应该总是返回对象 操作前的值。
例如:
如果 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 对象来实现,并且 实现应该是无等待且可线性化的。
提前致谢!
【问题讨论】:
标签: multithreading concurrency synchronization compare-and-swap