硬件获取和添加指令能否保证无等待执行?



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

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

最新更新