Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
A queue using simple locking.
More...
#include <_concurrent_queue_impl.h>
|
void | push (const void *item, ticket k, concurrent_queue_base_v3< T > &base, item_constructor_t construct_item) |
|
bool | pop (void *dst, ticket k, concurrent_queue_base_v3< T > &base) |
|
micro_queue & | assign (const micro_queue &src, concurrent_queue_base_v3< T > &base, item_constructor_t construct_item) |
|
page * | make_copy (concurrent_queue_base_v3< T > &base, const page *src_page, size_t begin_in_page, size_t end_in_page, ticket &g_index, item_constructor_t construct_item) |
|
void | invalidate_page_and_rethrow (ticket k) |
|
|
void | copy_item (page &dst, size_t dindex, const void *src, item_constructor_t construct_item) |
|
void | copy_item (page &dst, size_t dindex, const page &src, size_t sindex, item_constructor_t construct_item) |
|
void | assign_and_destroy_item (void *dst, page &src, size_t index) |
|
void | spin_wait_until_my_turn (atomic< ticket > &counter, ticket k, concurrent_queue_rep_base &rb) const |
|
template<typename T>
class tbb::strict_ppl::internal::micro_queue< T >
A queue using simple locking.
For efficiency, this class has no constructor. The caller is expected to zero-initialize it.
Definition at line 58 of file _concurrent_queue_impl.h.
◆ item_constructor_t
◆ page
◆ assign()
Definition at line 286 of file _concurrent_queue_impl.h.
298 size_t end_in_first_page = (index+n_items<base.
my_rep->items_per_page)?(index+n_items):base.
my_rep->items_per_page;
300 head_page =
make_copy( base, srcp, index, end_in_first_page, g_index, construct_item );
304 for( srcp = srcp->next; srcp!=src.
tail_page; srcp=srcp->next ) {
305 cur_page->next =
make_copy( base, srcp, 0, base.
my_rep->items_per_page, g_index, construct_item );
306 cur_page = cur_page->next;
311 if( last_index==0 ) last_index = base.
my_rep->items_per_page;
313 cur_page->next =
make_copy( base, srcp, 0, last_index, g_index, construct_item );
314 cur_page = cur_page->next;
◆ assign_and_destroy_item()
◆ copy_item() [1/2]
◆ copy_item() [2/2]
◆ get_ref()
◆ invalidate_page_and_rethrow()
◆ make_copy()
Definition at line 344 of file _concurrent_queue_impl.h.
348 concurrent_queue_page_allocator& pa = base;
349 page* new_page = pa.allocate_page();
350 new_page->
next = NULL;
351 new_page->
mask = src_page->mask;
352 for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
353 if( new_page->mask & uintptr_t(1)<<begin_in_page )
354 copy_item( *new_page, begin_in_page, *src_page, begin_in_page, construct_item );
◆ pop()
◆ push()
◆ spin_wait_until_my_turn()
◆ micro_queue_pop_finalizer< T >
◆ head_counter
◆ head_page
◆ page_mutex
◆ tail_counter
◆ tail_page
The documentation for this class was generated from the following file:
concurrent_queue_rep * my_rep
Internal representation.
static T & get_ref(page &p, size_t index)
atomic< page * > tail_page
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
bool is_valid_page(const concurrent_queue_rep_base::page *p)
void itt_store_word_with_release(tbb::atomic< T > &dst, U src)
atomic< page * > head_page
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
Container::iterator last(Container &c)
void copy_item(page &dst, size_t dindex, const void *src, item_constructor_t construct_item)
void invalidate_page_and_rethrow(ticket k)
void spin_wait_while_eq(const volatile T &location, U value)
Spin WHILE the value of the variable is equal to a given value.
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d
static const size_t n_queue
void spin_wait_until_my_turn(atomic< ticket > &counter, ticket k, concurrent_queue_rep_base &rb) const
atomic< page * > tail_page
void move(tbb_thread &t1, tbb_thread &t2)
void pause()
Pause for a while.
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void * lock
Class that implements exponential backoff.
void assign_and_destroy_item(void *dst, page &src, size_t index)
atomic< size_t > n_invalid_entries
void itt_hide_store_word(T &dst, T src)
argument_integer_type modulo_power_of_two(argument_integer_type arg, divisor_integer_type divisor)
A function to compute arg modulo divisor where divisor is a power of 2.
atomic< ticket > head_counter
atomic< page * > head_page
atomic< ticket > tail_counter
atomic< ticket > tail_counter
atomic< ticket > head_counter
void const char const char int ITT_FORMAT __itt_group_sync p
void call_itt_notify(notify_type, void *)
void spin_wait_until_eq(const volatile T &location, const U value)
Spin UNTIL the value of the variable is equal to a given value.
page * make_copy(concurrent_queue_base_v3< T > &base, const page *src_page, size_t begin_in_page, size_t end_in_page, ticket &g_index, item_constructor_t construct_item)
concurrent_queue_rep_base::page page
Copyright © 2005-2020 Intel Corporation. All Rights Reserved.
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.