Concurrency 如何知道CAS指令是否成功?

Concurrency 如何知道CAS指令是否成功?,concurrency,concurrent-programming,compare-and-swap,Concurrency,Concurrent Programming,Compare And Swap,典型的比较和交换指令不报告是否成功。相反,它只返回旧的值。如何快速确定CAS是否成功更新了值 CAS(location, compareValue, newValue): oldValue = *location if (oldValue == compareValue) *location = newValue; return oldValue ; 这很简单,只需将返回(旧)值与CAS本身用于比较的值进行比较 if (CAS(location, compareValue

典型的比较和交换指令不报告是否成功。相反,它只返回旧的值。如何快速确定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++的InterlocatedCompareExchange*()函数的方法,这些函数构建在它们之上