concurrency¶
The contents of this module can be included with the header
hpx/modules/concurrency.hpp. These headers may be used by user-code but are not
guaranteed stable (neither header location nor contents). You are using these at
your own risk. If you wish to use non-public functionality from a module we
strongly suggest only including the module header hpx/modules/concurrency.hpp, not
the particular header in which the functionality you would like to use is
defined. See Public API for a list of names that are part of the public
HPX API.
Header hpx/concurrency/barrier.hpp¶
Header hpx/concurrency/cache_line_data.hpp¶
-
template<typename
Data>
structcache_aligned_data<Data, std::false_type>¶ - #include <cache_line_data.hpp>
Public Functions
-
cache_aligned_data()¶
-
cache_aligned_data(Data &&data)¶
-
cache_aligned_data(Data const &data)¶
Public Members
-
Data
data_¶
-
-
template<typename
Data>
structcache_aligned_data_derived<Data, std::false_type> : public Data¶ - #include <cache_line_data.hpp>
-
namespace
hpx -
namespace
threads
-
namespace
util Typedefs
-
using
cache_line_data= cache_aligned_data<Data>¶
-
template<typename
Data, typenameNeedsPadding= typename detail::needs_padding<Data>::type>
structcache_aligned_data¶ - #include <cache_line_data.hpp>
Public Functions
-
cache_aligned_data()
-
cache_aligned_data(Data &&data)
-
cache_aligned_data(Data const &data)
-
-
template<typename
Data>
structcache_aligned_data<Data, std::false_type> - #include <cache_line_data.hpp>
Public Functions
-
cache_aligned_data()
-
cache_aligned_data(Data &&data)
-
cache_aligned_data(Data const &data)
Public Members
-
Data
data_
-
-
template<typename
Data, typenameNeedsPadding= typename detail::needs_padding<Data>::type>
structcache_aligned_data_derived: public Data¶ - #include <cache_line_data.hpp>
Public Functions
-
cache_aligned_data_derived()
-
cache_aligned_data_derived(Data &&data)
-
cache_aligned_data_derived(Data const &data)
Public Members
-
template<>
charcacheline_pad[get_cache_line_padding_size(sizeof(Data))]¶
-
-
using
-
namespace
Header hpx/concurrency/concurrentqueue.hpp¶
Defines
-
MOODYCAMEL_THREADLOCAL¶
-
MOODYCAMEL_EXCEPTIONS_ENABLED¶
-
MOODYCAMEL_TRY¶
-
MOODYCAMEL_CATCH(...)¶
-
MOODYCAMEL_RETHROW¶
-
MOODYCAMEL_THROW(expr)¶
-
MOODYCAMEL_NOEXCEPT¶
-
MOODYCAMEL_NOEXCEPT_CTOR(type, valueType, expr)¶
-
MOODYCAMEL_NOEXCEPT_ASSIGN(type, valueType, expr)¶
-
MOODYCAMEL_DELETE_FUNCTION¶
-
namespace
hpx -
namespace
concurrency¶ Functions
-
template<typename
T, typenameTraits>
voidswap(typename ConcurrentQueue<T, Traits>::ImplicitProducerKVP &a, typename ConcurrentQueue<T, Traits>::ImplicitProducerKVP &b)¶
-
template<typename
T, typenameTraits>
voidswap(ConcurrentQueue<T, Traits> &a, ConcurrentQueue<T, Traits> &b)¶
-
void
swap(ProducerToken &a, ProducerToken &b)¶
-
void
swap(ConsumerToken &a, ConsumerToken &b)¶
-
template<typename
T, typenameTraits= ConcurrentQueueDefaultTraits>
classConcurrentQueue¶ - #include <concurrentqueue.hpp>
Public Types
-
typedef ::hpx::concurrency::ProducerToken
producer_token_t¶
-
typedef ::hpx::concurrency::ConsumerToken
consumer_token_t¶
-
typedef Traits::index_t
index_t¶
-
typedef Traits::size_t
size_t¶
Public Functions
-
ConcurrentQueue(size_t capacity = 6 * BLOCK_SIZE)¶
-
~ConcurrentQueue()¶
-
ConcurrentQueue(ConcurrentQueue const&)¶
-
ConcurrentQueue &
operator=(ConcurrentQueue const&)¶
-
ConcurrentQueue(ConcurrentQueue &&other)¶
-
ConcurrentQueue &
operator=(ConcurrentQueue &&other)¶
-
void
swap(ConcurrentQueue &other)¶
-
bool
enqueue(T const &item)¶
-
bool
enqueue(T &&item)¶
-
bool
enqueue(producer_token_t const &token, T const &item)¶
-
bool
enqueue(producer_token_t const &token, T &&item)¶
-
template<typename
It>
boolenqueue_bulk(producer_token_t const &token, It itemFirst, size_t count)¶
-
bool
try_enqueue(T const &item)¶
-
bool
try_enqueue(T &&item)¶
-
bool
try_enqueue(producer_token_t const &token, T const &item)¶
-
bool
try_enqueue(producer_token_t const &token, T &&item)¶
-
template<typename
It>
booltry_enqueue_bulk(producer_token_t const &token, It itemFirst, size_t count)¶
-
template<typename
U>
booltry_dequeue(consumer_token_t &token, U &item)¶
-
template<typename
It>
size_ttry_dequeue_bulk(consumer_token_t &token, It itemFirst, size_t max)¶
-
template<typename
U>
booltry_dequeue_from_producer(producer_token_t const &producer, U &item)¶
-
template<typename
It>
size_ttry_dequeue_bulk_from_producer(producer_token_t const &producer, It itemFirst, size_t max)¶
Public Static Functions
-
static bool
is_lock_free()¶
Public Static Attributes
-
const size_t
EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD= static_cast<size_t>(Traits::EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD)¶
-
const size_t
EXPLICIT_INITIAL_INDEX_SIZE= static_cast<size_t>(Traits::EXPLICIT_INITIAL_INDEX_SIZE)¶
-
const size_t
IMPLICIT_INITIAL_INDEX_SIZE= static_cast<size_t>(Traits::IMPLICIT_INITIAL_INDEX_SIZE)¶
-
const size_t
INITIAL_IMPLICIT_PRODUCER_HASH_SIZE= static_cast<size_t>(Traits::INITIAL_IMPLICIT_PRODUCER_HASH_SIZE)¶
-
const std::uint32_t
EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE= static_cast<std::uint32_t>(Traits::EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE)¶
-
const size_t hpx::concurrency::ConcurrentQueue::MAX_SUBQUEUE_SIZE = (details::const_numeric_max<size_t>::value - static_cast<size_t>(Traits::MAX_SUBQUEUE_SIZE) < BLOCK_SIZE) ? details::const_numeric_max<size_t>::value : ((static_cast<size_t>(Traits::MAX_SUBQUEUE_SIZE) + (BLOCK_SIZE - 1)) / BLOCK_SIZE * BLOCK_SIZE)
Private Types
Private Functions
-
ConcurrentQueue &
swap_internal(ConcurrentQueue &other)¶
-
template<AllocationMode
canAlloc, typenameU>
boolinner_enqueue(producer_token_t const &token, U &&element)¶
-
template<AllocationMode
canAlloc, typenameU>
boolinner_enqueue(U &&element)¶
-
template<AllocationMode
canAlloc, typenameIt>
boolinner_enqueue_bulk(producer_token_t const &token, It itemFirst, size_t count)¶
-
template<AllocationMode
canAlloc, typenameIt>
boolinner_enqueue_bulk(It itemFirst, size_t count)¶
-
bool
update_current_producer_after_rotation(consumer_token_t &token)¶
-
template<AllocationMode
canAlloc>
Block *requisition_block()¶
-
ProducerBase *
recycle_or_create_producer(bool isExplicit)¶
-
ProducerBase *
recycle_or_create_producer(bool isExplicit, bool &recycled)¶
-
ProducerBase *
add_producer(ProducerBase *producer)¶
-
void
reown_producers()¶
-
void
populate_initial_implicit_producer_hash()¶
-
void
swap_implicit_producer_hashes(ConcurrentQueue &other)¶
-
ImplicitProducer *
get_or_add_implicit_producer()¶
Private Members
-
std::atomic<ProducerBase*>
producerListTail¶
-
std::atomic<ImplicitProducerHash*>
implicitProducerHash¶
-
ImplicitProducerHash
initialImplicitProducerHash¶
-
std::array<ImplicitProducerKVP, INITIAL_IMPLICIT_PRODUCER_HASH_SIZE>
initialImplicitProducerHashEntries¶
Private Static Functions
Friends
-
friend
hpx::concurrency::ProducerToken
-
friend
hpx::concurrency::ConsumerToken
-
friend
hpx::concurrency::ExplicitProducer
-
friend
hpx::concurrency::ImplicitProducer
-
friend
hpx::concurrency::ConcurrentQueueTests
-
struct
Block¶ Public Functions
-
template<>
Block()¶
-
template<InnerQueueContext
context>
boolis_empty() const¶
-
template<InnerQueueContext
context>
boolset_empty(index_t i)¶
-
template<InnerQueueContext
context>
boolset_many_empty(index_t i, size_t count)¶
-
template<InnerQueueContext
context>
voidset_all_empty()¶
-
template<InnerQueueContext
context>
voidreset_empty()¶
-
template<>
T *operator[](index_t idx)¶
-
template<>
T const *operator[](index_t idx) const¶
Public Members
-
template<>
charelements[sizeof(T) *BLOCK_SIZE]¶
-
template<>
details::max_align_tdummy¶
-
template<>
Block *next¶
-
std::atomic<bool> hpx::concurrency::ConcurrentQueue< T, Traits >::Block::emptyFlags[BLOCK_SIZE<=EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD ? BLOCK_SIZE :1]
-
template<>
booldynamicallyAllocated¶
Private Members
-
template<>
union hpx::concurrency::ConcurrentQueue::Block::[anonymous] [anonymous]¶
-
template<>
-
struct
ExplicitProducer: public hpx::concurrency::ConcurrentQueue<T, Traits>::ProducerBase¶ Public Functions
-
template<>
ExplicitProducer(ConcurrentQueue *parent)¶
-
template<>
~ExplicitProducer()¶
-
template<AllocationMode
allocMode, typenameU>
boolenqueue(U &&element)¶
-
template<typename
U>
booldequeue(U &element)¶
-
template<AllocationMode
allocMode, typenameIt>
boolenqueue_bulk(It itemFirst, size_t count)¶
-
template<typename
It>
size_tdequeue_bulk(It &itemFirst, size_t max)¶
Private Functions
-
template<>
boolnew_block_index(size_t numberOfFilledSlotsToExpose)¶
Private Members
-
template<>
size_tpr_blockIndexSlotsUsed¶
-
template<>
size_tpr_blockIndexSize¶
-
template<>
size_tpr_blockIndexFront¶
-
template<>
BlockIndexEntry *pr_blockIndexEntries¶
-
template<>
void *pr_blockIndexRaw¶
-
struct
BlockIndexEntry¶
-
struct
BlockIndexHeader¶
-
template<>
-
template<typename
N>
structFreeList¶ Public Functions
-
template<>
FreeList()¶
-
template<>
voidswap(FreeList &other)¶
-
template<>
FreeList &operator=(FreeList const&)¶
-
template<>
voidadd(N *node)¶
-
template<>
N *try_get()¶
-
template<>
N *head_unsafe() const¶
Private Functions
-
template<>
voidadd_knowing_refcount_is_zero(N *node)¶
-
template<>
-
struct
ImplicitProducer: public hpx::concurrency::ConcurrentQueue<T, Traits>::ProducerBase¶ Public Functions
-
template<>
ImplicitProducer(ConcurrentQueue *parent)¶
-
template<>
~ImplicitProducer()¶
-
template<AllocationMode
allocMode, typenameU>
boolenqueue(U &&element)¶
-
template<typename
U>
booldequeue(U &element)¶
-
template<AllocationMode
allocMode, typenameIt>
boolenqueue_bulk(It itemFirst, size_t count)¶
-
template<typename
It>
size_tdequeue_bulk(It &itemFirst, size_t max)¶
Private Functions
-
template<AllocationMode
allocMode>
boolinsert_block_index_entry(BlockIndexEntry *&idxEntry, index_t blockStartIndex)¶
-
template<>
voidrewind_block_index_tail()¶
-
template<>
BlockIndexEntry *get_block_index_entry_for_index(index_t index) const¶
-
template<>
size_tget_block_index_index_for_index(index_t index, BlockIndexHeader *&localBlockIndex) const¶
-
template<>
boolnew_block_index()¶
Private Members
-
template<>
size_tnextBlockIndexCapacity¶
Private Static Attributes
-
template<>
const index_tINVALID_BLOCK_BASE= 1¶
-
struct
BlockIndexEntry¶
-
struct
BlockIndexHeader¶
-
template<>
-
struct
ImplicitProducerHash¶
-
struct
ImplicitProducerKVP¶ Public Functions
-
template<>
ImplicitProducerKVP()¶
-
template<>
ImplicitProducerKVP(ImplicitProducerKVP &&other)¶
-
template<>
ImplicitProducerKVP &operator=(ImplicitProducerKVP &&other)¶
-
template<>
voidswap(ImplicitProducerKVP &other)¶
-
template<>
-
struct
ProducerBase: public hpx::concurrency::details::ConcurrentQueueProducerTypelessBase¶ Public Functions
-
template<>
ProducerBase(ConcurrentQueue *parent_, bool isExplicit_)¶
-
template<>
virtual~ProducerBase()¶
-
template<typename
U>
booldequeue(U &element)¶
-
template<typename
It>
size_tdequeue_bulk(It &itemFirst, size_t max)¶
-
template<>
ProducerBase *next_prod() const¶
-
template<>
size_tsize_approx() const¶
-
template<>
index_tgetTail() const¶
-
template<>
-
typedef ::hpx::concurrency::ProducerToken
-
struct
ConcurrentQueueDefaultTraits¶ - #include <concurrentqueue.hpp>
Public Static Attributes
-
const size_t
MAX_SUBQUEUE_SIZE= details::const_numeric_max<size_t>::value¶
-
const size_t
-
struct
ConsumerToken¶ - #include <concurrentqueue.hpp>
Public Functions
-
ConsumerToken(ConsumerToken &&other)¶
-
ConsumerToken &
operator=(ConsumerToken &&other)¶
-
void
swap(ConsumerToken &other)¶
-
ConsumerToken(ConsumerToken const&)¶
-
ConsumerToken &
operator=(ConsumerToken const&)¶
Private Members
-
details::ConcurrentQueueProducerTypelessBase *
currentProducer¶
-
details::ConcurrentQueueProducerTypelessBase *
desiredProducer¶
Friends
-
friend
hpx::concurrency::ConcurrentQueue
-
friend
hpx::concurrency::ConcurrentQueueTests
-
-
struct
ProducerToken¶ - #include <concurrentqueue.hpp>
Public Functions
-
ProducerToken(ProducerToken &&other)¶
-
ProducerToken &
operator=(ProducerToken &&other)¶
-
void
swap(ProducerToken &other)¶
-
bool
valid() const¶
-
~ProducerToken()¶
-
ProducerToken(ProducerToken const&)¶
-
ProducerToken &
operator=(ProducerToken const&)¶
Protected Attributes
-
details::ConcurrentQueueProducerTypelessBase *
producer¶
Friends
-
friend
hpx::concurrency::ConcurrentQueue
-
friend
hpx::concurrency::ConcurrentQueueTests
-
-
namespace
details¶ -
Functions
-
static thread_id_t
thread_id()¶
-
static bool() hpx::concurrency::details::likely(bool x)
-
static bool() hpx::concurrency::details::unlikely(bool x)
-
static size_t
hash_thread_id(thread_id_t id)¶
-
template<typename
U>
static char *align_for(char *ptr)¶
-
template<bool
use32>
struct_hash_32_or_64¶ - #include <concurrentqueue.hpp>
-
template<>
struct_hash_32_or_64<1>¶ - #include <concurrentqueue.hpp>
-
struct
ConcurrentQueueProducerTypelessBase¶ - #include <concurrentqueue.hpp>
Public Functions
-
ConcurrentQueueProducerTypelessBase()¶
Public Members
-
ProducerToken *
token¶
-
-
template<typename
T>
structconst_numeric_max¶ - #include <concurrentqueue.hpp>
Public Static Attributes
-
const T hpx::concurrency::details::const_numeric_max::value= std::numeric_limits<T>::is_signed ? (static_cast<T>(1) << (sizeof(T) * CHAR_BIT - 1)) - static_cast<T>(1) : static_cast<T>(-1)
-
-
union
max_align_t¶ - #include <concurrentqueue.hpp>
-
template<bool
Enable>
structnomove_if¶ - #include <concurrentqueue.hpp>
-
template<>
structnomove_if<false>¶ - #include <concurrentqueue.hpp>
-
template<>
structstatic_is_lock_free<bool>¶ - #include <concurrentqueue.hpp>
-
template<typename
U>
structstatic_is_lock_free<U*>¶ - #include <concurrentqueue.hpp>
Public Types
-
enum [anonymous]¶
Values:
-
value= ATOMIC_POINTER_LOCK_FREE
-
-
enum [anonymous]¶
-
template<typename
T>
structstatic_is_lock_free_num¶ - #include <concurrentqueue.hpp>
Public Types
-
enum [anonymous]¶
Values:
-
value= 0
-
-
enum [anonymous]¶
-
template<>
structstatic_is_lock_free_num<int>¶ - #include <concurrentqueue.hpp>
Public Types
-
enum [anonymous]¶
Values:
-
value= ATOMIC_INT_LOCK_FREE
-
-
enum [anonymous]¶
-
template<>
structstatic_is_lock_free_num<long>¶ - #include <concurrentqueue.hpp>
Public Types
-
enum [anonymous]¶
Values:
-
value= ATOMIC_LONG_LOCK_FREE
-
-
enum [anonymous]¶
-
template<>
structstatic_is_lock_free_num<long long>¶ - #include <concurrentqueue.hpp>
Public Types
-
enum [anonymous]¶
Values:
-
value= ATOMIC_LLONG_LOCK_FREE
-
-
enum [anonymous]¶
-
template<>
structstatic_is_lock_free_num<short>¶ - #include <concurrentqueue.hpp>
Public Types
-
enum [anonymous]¶
Values:
-
value= ATOMIC_SHORT_LOCK_FREE
-
-
enum [anonymous]¶
-
template<>
structstatic_is_lock_free_num<signed char>¶ - #include <concurrentqueue.hpp>
Public Types
-
enum [anonymous]¶
Values:
-
value= ATOMIC_CHAR_LOCK_FREE
-
-
enum [anonymous]¶
-
template<typename
thread_id_t>
structthread_id_converter¶ - #include <concurrentqueue.hpp>
Public Static Functions
-
static thread_id_hash_t
prehash(thread_id_t const &x)¶
-
static thread_id_hash_t
-
static thread_id_t
-
template<typename
-
namespace
Header hpx/concurrency/deque.hpp¶
-
namespace
boost¶ -
namespace
lockfree¶ -
-
template<typename
T, typenamefreelist_t= caching_freelist_t, typenameAlloc= std::allocator<T>>
structdeque¶ - #include <deque.hpp>
Public Types
-
template<>
usingnode= deque_node<T>¶
-
template<>
usinganchor= deque_anchor<T>¶
-
template<>
usingnode_allocator= typename std::allocator_traits<Alloc>::template rebind_alloc<node>¶
-
template<>
usingpool= typename std::conditional<std::is_same<freelist_t, caching_freelist_t>::value, caching_freelist<node, node_allocator>, static_freelist<node, node_allocator>>::type¶
Public Functions
-
HPX_NON_COPYABLE(deque)¶
-
~deque()¶
-
bool
empty() const¶
-
bool
is_lock_free() const¶
-
bool
push_left(T const &data)¶
-
bool
push_right(T const &data)¶
-
bool
pop_left(T &r)¶
-
bool
pop_left(T *r)¶
-
bool
pop_right(T &r)¶
-
bool
pop_right(T *r)¶
-
template<>
-
template<typename
T>
structdeque_anchor¶ - #include <deque.hpp>
Public Functions
-
deque_anchor()¶
-
deque_anchor(deque_anchor const &p)¶
-
deque_anchor(pair const &p)¶
-
pair
lrs() volatile const¶
-
node *
left() volatile const¶
-
node *
right() volatile const¶
-
tag_t
status() volatile const¶
-
tag_t
tag() volatile const¶
-
bool
cas(deque_anchor &expected, deque_anchor const &desired) volatile¶
-
bool
cas(pair &expected, deque_anchor const &desired) volatile¶
-
bool
cas(deque_anchor &expected, pair const &desired) volatile¶
-
bool
cas(pair &expected, pair const &desired) volatile¶
-
bool
operator==(volatile deque_anchor const &rhs) const¶
-
bool
operator!=(volatile deque_anchor const &rhs) const¶
-
bool
operator==(volatile pair const &rhs) const¶
-
bool
operator!=(volatile pair const &rhs) const¶
-
bool
is_lock_free() const¶
Private Members
-
atomic_pair
pair_¶
-
-
template<typename
T>
structdeque_node¶ - #include <deque.hpp>
Public Types
-
typedef detail::tagged_ptr<deque_node>
pointer¶
Public Functions
-
deque_node()¶
-
deque_node(deque_node const &p)¶
-
deque_node(deque_node *lptr, deque_node *rptr, T const &v, tag_t ltag = 0, tag_t rtag = 0)¶
-
typedef detail::tagged_ptr<deque_node>
-
template<typename
-
namespace