10 #include "opentelemetry/version.h"
13 # define _WINSOCKAPI_ // stops including winsock.h
15 #elif defined(__i386__) || defined(__x86_64__)
16 # if defined(__clang__)
17 # include <emmintrin.h>
18 # elif defined(__INTEL_COMPILER)
19 # include <immintrin.h>
65 #elif defined(__i386__) || defined(__x86_64__)
66 # if defined(__clang__) || defined(__INTEL_COMPILER)
69 __builtin_ia32_pause();
71 #elif defined(__armel__) || defined(__ARMEL__)
72 asm volatile(
"nop" :::
"memory");
73 #elif defined(__arm__) || defined(__aarch64__) // arm big endian / arm64
74 __asm__ __volatile__(
"yield" :::
"memory");
85 return !flag_.load(std::memory_order_relaxed) &&
86 !flag_.exchange(
true, std::memory_order_acquire);
101 if (!flag_.exchange(
true, std::memory_order_acquire))
115 std::this_thread::yield();
126 void unlock() noexcept { flag_.store(
false, std::memory_order_release); }
129 std::atomic<bool> flag_{
false};