16 #include "absl/base/internal/low_level_alloc.h"
17 #ifndef ABSL_LOW_LEVEL_ALLOC_MISSING
19 #include "absl/synchronization/internal/per_thread_sem.h"
23 #include "absl/base/attributes.h"
24 #include "absl/base/internal/thread_identity.h"
25 #include "absl/synchronization/internal/waiter.h"
29 namespace synchronization_internal {
45 identity->
ticker.store(0, std::memory_order_relaxed);
46 identity->
wait_start.store(0, std::memory_order_relaxed);
47 identity->
is_idle.store(
false, std::memory_order_relaxed);
52 identity->
ticker.fetch_add(1, std::memory_order_relaxed) + 1;
53 const int wait_start = identity->
wait_start.load(std::memory_order_relaxed);
54 const bool is_idle = identity->
is_idle.load(std::memory_order_relaxed);
79 int ticker = identity->
ticker.load(std::memory_order_relaxed);
80 identity->
wait_start.store(ticker ? ticker : 1, std::memory_order_relaxed);
81 identity->
is_idle.store(
false, std::memory_order_relaxed);
95 identity->
is_idle.store(
false, std::memory_order_relaxed);
96 identity->
wait_start.store(0, std::memory_order_relaxed);
102 #endif // ABSL_LOW_LEVEL_ALLOC_MISSING