22 #include "absl/base/internal/spinlock_wait.h"
25 #include "absl/base/internal/spinlock_win32.inc"
26 #elif defined(__linux__)
27 #include "absl/base/internal/spinlock_linux.inc"
28 #elif defined(__akaros__)
29 #include "absl/base/internal/spinlock_akaros.inc"
31 #include "absl/base/internal/spinlock_posix.inc"
36 namespace base_internal {
44 uint32_t v = w->load(std::memory_order_acquire);
46 for (
i = 0;
i !=
n &&
v != trans[
i].
from;
i++) {
50 }
else if (trans[
i].
to ==
v ||
51 w->compare_exchange_strong(
v, trans[
i].
to,
52 std::memory_order_acquire,
53 std::memory_order_relaxed)) {
54 if (trans[
i].
done)
return v;
66 r = 0x5deece66d
LL *
r + 0xb;
69 if (loop < 0 || loop > 32) {
72 const int kMinDelay = 128 << 10;
74 int delay = kMinDelay << (
loop / 8);
76 return delay | ((delay - 1) &
static_cast<int>(
r));