如何实现一种新的比较和交换指令

时间:2013-03-03 19:12:22

标签: multithreading concurrency synchronization compare-and-swap

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

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

它们都支持比较和交换(a,b)操作,但是在CAS上 此操作返回true / false并将对象值更改为b if 它等于a,在CAS2上这个操作具有相同的效果,但是 它应该总是返回对象,而不是返回true / false 操作前的值。

例如:

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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