Go to the documentation of this file.
15 #include "absl/base/internal/spinlock.h"
21 #include "absl/base/attributes.h"
22 #include "absl/base/config.h"
23 #include "absl/base/internal/atomic_hook.h"
24 #include "absl/base/internal/cycleclock.h"
25 #include "absl/base/internal/spinlock_wait.h"
26 #include "absl/base/internal/sysinfo.h"
27 #include "absl/base/call_once.h"
59 namespace base_internal {
62 const void *lock,
int64_t wait_cycles)>
70 #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
81 : lockword_(IsCooperative(
mode) ? kSpinLockCooperative : 0) {
97 int c = adaptive_spin_count;
100 lock_value =
lockword_.load(std::memory_order_relaxed);
125 int lock_wait_call_count = 0;
136 std::memory_order_relaxed, std::memory_order_relaxed)) {
201 static const int64_t kMaxWaitTime =
void SpinLockDelay(std::atomic< uint32_t > *w, uint32_t value, int loop, base_internal::SchedulingMode scheduling_mode)
static constexpr int kLockwordReservedShift
#define ABSL_TSAN_MUTEX_PRE_DIVERT(...)
static constexpr uint32_t kWaitTimeMask
#define ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
static constexpr uint32_t kSpinLockCooperative
#define ABSL_NAMESPACE_END
void SlowLock() ABSL_ATTRIBUTE_COLD
static constexpr uint32_t kSpinLockDisabledScheduling
void SlowUnlock(uint32_t lock_value) ABSL_ATTRIBUTE_COLD
static ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES base_internal::AtomicHook< void(*)(const void *lock, int64_t wait_cycles)> submit_profile_data
#define ABSL_NAMESPACE_BEGIN
static uint64_t DecodeWaitCycles(uint32_t lock_value)
static constexpr uint32_t kSpinLockHeld
#define ABSL_TSAN_MUTEX_CREATE(...)
unsigned __int64 uint64_t
static constexpr uint32_t kSpinLockSleeper
uint32_t TryLockInternal(uint32_t lock_value, uint32_t wait_cycles)
static uint32_t EncodeWaitCycles(int64_t wait_start_time, int64_t wait_end_time)
static constexpr int kProfileTimestampShift
@ SCHEDULE_COOPERATIVE_AND_KERNEL
void LowLevelCallOnce(absl::once_flag *flag, Callable &&fn, Args &&... args)
void RegisterSpinLockProfiler(void(*fn)(const void *contendedlock, int64_t wait_cycles))
std::atomic< uint32_t > lockword_
void SpinLockWake(std::atomic< uint32_t > *w, bool all)
#define ABSL_TSAN_MUTEX_POST_DIVERT(...)
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:15