26#ifndef TEMPTABLE_LOCK_FREE_POOL_H
27#define TEMPTABLE_LOCK_FREE_POOL_H
42template <
typename T,
size_t POOL_SIZE,
44 template <
typename,
typename =
void>
class TypeSelector =
45 Lock_free_type_selector>
47 std::array<Lock_free_type<T, ALIGNMENT, TypeSelector>, POOL_SIZE>
m_lock_free;
58 for (
auto &v :
m_lock_free) v.m_value = default_value;
76 std::memory_order order = std::memory_order_seq_cst) {
88 size_t idx, std::memory_order order = std::memory_order_seq_cst)
const {
106 std::memory_order order = std::memory_order_seq_cst) {
107 return m_lock_free[idx].m_value.compare_exchange_strong(expected, desired,
115 constexpr size_t size()
const {
return POOL_SIZE; }
Lock-free pool which consists of POOL_SIZE Lock_free_type elements.
Definition: lock_free_pool.h:46
constexpr size_t size() const
Returns the number of elements this pool contains.
Definition: lock_free_pool.h:115
Lock_free_pool(const Lock_free_pool &)=delete
Copy-constructor and copy-assignment operator are disabled.
bool compare_exchange_strong(size_t idx, Lock_free_pool::Type &expected, Lock_free_pool::Type desired, std::memory_order order=std::memory_order_seq_cst)
Atomically compares the object representation of an array element at given index with the expected,...
Definition: lock_free_pool.h:104
Lock_free_pool(Lock_free_pool::Type default_value)
Constructor.
Definition: lock_free_pool.h:57
Lock_free_pool()
Default constructor.
Definition: lock_free_pool.h:54
typename Lock_free_type< T, ALIGNMENT, TypeSelector >::Type Type
Definition: lock_free_pool.h:50
Lock_free_pool::Type load(size_t idx, std::memory_order order=std::memory_order_seq_cst) const
Atomically loads and returns the current value from an array at given index.
Definition: lock_free_pool.h:87
Lock_free_pool(Lock_free_pool &&)=delete
Ditto for move-constructor and move-assignment operator.
Lock_free_pool & operator=(Lock_free_pool &&)=delete
Lock_free_pool & operator=(const Lock_free_pool &)=delete
void store(size_t idx, Lock_free_pool::Type value, std::memory_order order=std::memory_order_seq_cst)
Atomically replaces current value in an array at given index.
Definition: lock_free_pool.h:75
std::array< Lock_free_type< T, ALIGNMENT, TypeSelector >, POOL_SIZE > m_lock_free
Definition: lock_free_pool.h:47
Lock-free type (selection) implementation.
Definition: allocator.h:44
Alignment
Enum class describing alignment-requirements.
Definition: lock_free_type.h:74
typename TypeSelector< T >::Type Type
Definition: lock_free_type.h:304