因此,如果多个进程执行FAA,是否可以保证此FAA指令将以无等待方式执行?如果完成执行此指令的进程没有停在那里但反复尝试执行它会怎么样?
答案 0 :(得分:0)
如果算法不包含重试循环或等待循环,则无需等待。由于fetch_add()
永远不会失败(与compare_exchange_weak()
不同),因此该操作本身适合编写免等待算法(因为不需要重试循环)。当然,使用fetch_add()
指令的算法是否真正免等待时间取决于该算法的其余部分。只要您的硬件上支持fetch_add()
作为指令,它就无需等待。仅当不支持它并且必须通过CAS循环或LL / CS对其进行仿真时,它才不再需要等待,因为它们不是不需要等待的。