27#ifndef TEMPTABLE_SHARED_BLOCK_POOL_H 
   28#define TEMPTABLE_SHARED_BLOCK_POOL_H 
   60template <
size_t POOL_SIZE>
 
   63  static_assert(POOL_SIZE && !(POOL_SIZE & (POOL_SIZE - 1)),
 
   64                "POOL_SIZE template parameter must be a power of two.");
 
  116    } 
else if (slot_thd_id == thd_id) {
 
  137      if (!block.is_empty()) {
 
Block abstraction for temptable-allocator.
 
Memory-block abstraction whose purpose is to serve as a building block for custom memory-allocator im...
Definition: block.h:163
 
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:105
 
typename Lock_free_type< unsigned long long, ALIGNMENT, Lock_free_type_selector >::Type Type
Definition: lock_free_pool.h:51
 
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:88
 
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:76
 
Lock-free pool of POOL_SIZE Block elements.
Definition: shared_block_pool.h:61
 
std::array< L1_dcache_aligned_block, POOL_SIZE > m_shared_block
An array of L1-dcache aligned Blocks Note: This is not the same as: alignas(L1_DCACHE_SIZE) std::arra...
Definition: shared_block_pool.h:94
 
bool try_release(size_t thd_id)
Given the THD identifier, try to release an acquired instance of a Block.
Definition: shared_block_pool.h:133
 
Block * try_acquire(size_t thd_id)
Given the THD identifier, try to acquire an instance of Block.
Definition: shared_block_pool.h:111
 
Shared_block_slot m_slot
Lock-free slots.
Definition: shared_block_pool.h:97
 
static constexpr Shared_block_slot_element_type FREE_SLOT
Constexpr variable denoting a non-occupied (free) slot.
Definition: shared_block_pool.h:76
 
typename Shared_block_slot::Type Shared_block_slot_element_type
Be pedantic about the element type we used when building the slot type.
Definition: shared_block_pool.h:73
 
static constexpr size_t MODULO_MASK
Bitmask which enables us to implement modulo-arithmetic operation in single bitwise instruction.
Definition: shared_block_pool.h:81
 
Lock-free pool implementation.
 
Lock-free type (selection) implementation.
 
ValueType max(X &&first)
Definition: gtid.h:103
 
Definition: allocator.h:48
 
@ MMAP_FILE
Memory is allocated on disk, using mmap()'ed file.
 
@ RAM
Memory is allocated from RAM, using malloc() for example.
 
constexpr size_t L1_DCACHE_SIZE
Store L1-dcache size information into the constexpr expression.
Definition: constants.h:82
 
In the event of inability to express ourselves with something like std::array<alignas<N> Block> we ha...
Definition: shared_block_pool.h:86
 
Block block
Definition: shared_block_pool.h:87
 
static size_t decrease(size_t bytes)
Log decrements of MMAP-backed memory consumption.
Definition: allocator.h:99
 
static size_t decrease(size_t bytes)
Log decrements of heap-memory consumption.
Definition: allocator.h:72