27#ifndef MYSQL_CONCURRENCY_SPIN_LOCK_MUTEX
28#define MYSQL_CONCURRENCY_SPIN_LOCK_MUTEX
36#elif defined(__i386__) || defined(__x86_64__)
37#if defined(__INTEL_COMPILER)
39#elif defined(__clang__)
85#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
87#elif defined(__i386__) || defined(__x86_64__)
88 __builtin_ia32_pause();
90#elif defined(__arm__) || defined(__aarch64__)
91 __asm__
volatile(
"yield" :::
"memory");
94 std::this_thread::yield();
100 std::atomic_flag
m_lock = ATOMIC_FLAG_INIT;
Implementation of a spin-lock mutex.
Definition: spin_lock_mutex.h:59
Spin_lock_mutex & operator=(Spin_lock_mutex &&src)=delete
Spin_lock_mutex(Spin_lock_mutex &&)=delete
Spin_lock_mutex(const Spin_lock_mutex &)=delete
bool try_lock() noexcept
Non-blocking try-lock operation.
Definition: spin_lock_mutex.cpp:41
Spin_lock_mutex & operator=(const Spin_lock_mutex &src)=delete
void unlock()
Unblocks access to a critical section for other threads.
Definition: spin_lock_mutex.cpp:46
std::atomic_flag m_lock
Internal synchronization boolean, true means that lock is currently owned Since C++20,...
Definition: spin_lock_mutex.h:100
static void spin_yield() noexcept
Definition: spin_lock_mutex.h:83
Spin_lock_mutex(Mutex_key key={})
Definition: spin_lock_mutex.h:67
~Spin_lock_mutex()=default
void lock() noexcept
Acquire a lock, blocks access to a critical section until "unlock" is called.
Definition: spin_lock_mutex.cpp:28
Definition: cache_line_size.h:31
PSI_mutex_key Mutex_key
Definition: mutex_srv.h:41
noexcept
The return type for any call_and_catch(f, args...) call where f(args...) returns Type.
Definition: call_and_catch.h:76
required string key
Definition: replication_asynchronous_connection_failover.proto:60