马璞玉 发表于 2025-6-6 09:33:38

怎么使用硬件同步原语替代锁?

什么是硬件同步原语?

硬件同步原语(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。
它的伪代码如下:
>function faa(p : pointer to int, inc : int) returns int {    int value
页: [1]
查看完整版本: 怎么使用硬件同步原语替代锁?