硬件同步原语(Atomic Hardware Primitives)是由计算机硬件提供的一组原子操作。
我们常见的原语操作有CAS和FAA两种。
CAS
Compare and Swap(CAS),字面意思是先比较,再计算。它的伪代码如下。
<< atomic >>
function cas(p : pointer to int, old : int, new : int) returns bool {
if *p ≠ old {
return false
}
*p ← new
return true
}
复制代码
它的输入参数有三个:
p:要修改的变量的指针
old:旧值
new:新值
返回值是一个布尔值,标识是否赋值成功。
FAA
Fetch and Add(FAA),它的含义是先获取变量当前的值value,然后给变量p增加inc,最后返回变量p之前的值value。
它的伪代码如下:
[code]>function faa(p : pointer to int, inc : int) returns int { int value