硬件fetch&add指令能否保证免等待执行?
Can the hardware fetch&add instruction guarantee wait-free execution?
那么,如果有多个进程执行FAA,是否能保证这条FAA指令会以免等待的方式执行呢?如果执行完该指令的进程并没有就此停止,而是反复尝试执行该指令怎么办?
如果算法不包含重试循环或等待循环,则该算法是无等待的。由于 fetch_add()
永远不会失败(与 compare_exchange_weak()
不同),该操作本身适合编写无等待算法(因为不需要重试循环)。当然,使用 fetch_add()
指令的算法是否真的是无等待取决于算法的其余部分。只要您的硬件支持 fetch_add()
作为指令,它就无需等待。仅当它不受支持并且必须通过 CAS 循环或 LL/CS 进行模拟时,它才不再是免等待的,因为它们不是免等待的。
那么,如果有多个进程执行FAA,是否能保证这条FAA指令会以免等待的方式执行呢?如果执行完该指令的进程并没有就此停止,而是反复尝试执行该指令怎么办?
如果算法不包含重试循环或等待循环,则该算法是无等待的。由于 fetch_add()
永远不会失败(与 compare_exchange_weak()
不同),该操作本身适合编写无等待算法(因为不需要重试循环)。当然,使用 fetch_add()
指令的算法是否真的是无等待取决于算法的其余部分。只要您的硬件支持 fetch_add()
作为指令,它就无需等待。仅当它不受支持并且必须通过 CAS 循环或 LL/CS 进行模拟时,它才不再是免等待的,因为它们不是免等待的。