我怎么知道CAS指令是否成功?

时间:2011-11-23 06:13:34

标签: concurrency concurrent-programming compare-and-swap

典型的比较和交换指令不会报告是否成功。相反,它只是返回旧值,无论如何。如何快速确定CAS是否成功更新了值?

CAS(location, compareValue, newValue):
  oldValue = *location
  if (oldValue == compareValue)
    *location = newValue;
  return oldValue ;

1 个答案:

答案 0 :(得分:2)

这很简单,您只需将返回的(旧)值与用于比较的CAS本身进行比较。

 if (CAS(location, compareValue, newValue) == compareValue)
 {
   // CAS successfully wrote newValue to location
 }
 else
 {
   // CAS failed to write newValue to location
 }

这就是如何使用x86的CMPXHG(8B / 16B)指令和MSVC ++的InterlockedCompareExchange *()函数构建在它们之上。