32#ifndef QB_UTILS_PREFIX_H
33#define QB_UTILS_PREFIX_H
54#ifdef KNOWN_L1_CACHE_LINE_SIZE
55 return KNOWN_L1_CACHE_LINE_SIZE;
56#elif defined(__cpp_lib_hardware_interference_size)
57 return std::hardware_destructive_interference_size;
63#define QB_LOCKFREE_CACHELINE_BYTES cache_line_size()
64#define QB_LOCKFREE_EVENT_BUCKET_BYTES cache_line_size()
68#define QB_LOCKFREE_CACHELINE_ALIGNMENT __declspec(align(QB_LOCKFREE_CACHELINE_BYTES))
69#define QB_LOCKFREE_EVENT_BUCKET_ALIGNMENT \
70 __declspec(align(QB_LOCKFREE_EVENT_BUCKET_BYTES))
73#define QB_LOCKFREE_DCAS_ALIGNMENT
74#elif defined(_M_X64) || defined(_M_IA64)
75#define QB_LOCKFREE_PTR_COMPRESSION 1
76#define QB_LOCKFREE_DCAS_ALIGNMENT __declspec(align(16))
83#define QB_LOCKFREE_CACHELINE_ALIGNMENT alignas(QB_LOCKFREE_CACHELINE_BYTES)
84#define QB_LOCKFREE_EVENT_BUCKET_ALIGNMENT alignas(QB_LOCKFREE_EVENT_BUCKET_BYTES)
86#if defined(__i386__) || defined(__ppc__)
87#define QB_LOCKFREE_DCAS_ALIGNMENT
88#elif defined(__x86_64__)
89#define QB_LOCKFREE_PTR_COMPRESSION 1
90#define QB_LOCKFREE_DCAS_ALIGNMENT __attribute__((aligned(16)))
91#elif defined(__alpha__)
92#define QB_LOCKFREE_PTR_COMPRESSION 1
93#define QB_LOCKFREE_DCAS_ALIGNMENT
109 uint32_t __raw__[QB_LOCKFREE_CACHELINE_BYTES /
sizeof(uint32_t)];
124 uint32_t __raw__[QB_LOCKFREE_EVENT_BUCKET_BYTES /
sizeof(uint32_t)];
constexpr std::size_t cache_line_size()
Determines the optimal cache line size for the current platform at compile time.
Definition prefix.h:53
A structure automatically aligned to cache line boundaries.
Definition prefix.h:108
A structure aligned to event bucket boundaries, typically matching cache line size.
Definition prefix.h:123