【问题标题】:how to implement a new kind of compare&swap instruction如何实现一种新的比较和交换指令
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2016-11-17
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多