0

那么,如果多个进程执行FAA,是否可以保证这条FAA指令会以无等待的方式执行呢?如果完成执行该指令的进程没有停在那里而是反复尝试执行它怎么办?

4

1 回答 1

0

如果算法不包含重试循环或等待循环,则该算法是无等待的。由于fetch_add()永不失败(与 不同compare_exchange_weak()),操作本身适合编写无等待算法(因为不需要重试循环)。当然,使用该fetch_add()指令的算法是否实际上是无等待的取决于算法的其余部分。只要fetch_add()在您的硬件上作为指令被支持,它就无需等待。只有当它不受支持并且必须通过 CAS 循环或 LL/CS 进行模拟时,它才不再是无等待的,因为它们不是无等待的。

于 2019-03-15T14:13:32.000 回答