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



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

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

这很简单,您只需将返回的(旧的)值与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*()函数是如何构建在它们之上的。

相关内容

  • 没有找到相关文章

最新更新