diff --git a/src/fastlock.cpp b/src/fastlock.cpp index fdb71e62a..34382f4f0 100644 --- a/src/fastlock.cpp +++ b/src/fastlock.cpp @@ -379,7 +379,11 @@ extern "C" void fastlock_lock(struct fastlock *lock, spin_worker worker) #if defined(__i386__) || defined(__amd64__) __asm__ __volatile__ ("pause"); #elif defined(__aarch64__) - __asm__ __volatile__ ("yield"); + /* Use an isb here as we've found it's much closer in duration to + * the x86 pause instruction vs. yield which is a nop and thus the + * loop count is lower and the interconnect gets a lot more traffic + * from loading the ticket above. */ + __asm__ __volatile__ ("isb"); #endif if ((++cloops % loopLimit) == 0)