Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
Go to the documentation of this file.
17 #ifndef __TBB_concurrent_queue_H
18 #define __TBB_concurrent_queue_H
20 #define __TBB_concurrent_queue_H_include_area
28 namespace strict_ppl {
34 template<
typename T,
typename A = cache_aligned_allocator<T> >
44 void *b =
reinterpret_cast<void*
>(
my_allocator.allocate( n ));
52 my_allocator.deallocate(
reinterpret_cast<char*
>(b), n );
56 new (location) T(*
static_cast<const T*
>(src));
59 #if __TBB_CPP11_RVALUE_REF_PRESENT
61 new (location) T(
std::move(*
static_cast<T*
>(
const_cast<void*
>(src))) );
90 template<
typename InputIterator>
105 #if __TBB_CPP11_RVALUE_REF_PRESENT
136 #if __TBB_CPP11_RVALUE_REF_PRESENT
141 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
142 template<
typename... Arguments>
144 push( T(std::forward<Arguments>( args )...) );
146 #endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
180 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT
182 template<
typename InputIterator,
183 typename T =
typename std::iterator_traits<InputIterator>::value_type,
189 template<
typename T,
class A>
192 this->internal_finish_clear();
195 template<
typename T,
class A>
198 while( !empty() ) try_pop(
value);
209 template<
typename T,
class A = cache_aligned_allocator<T> >
234 new( &
get_ref(dst,index) ) T(*
static_cast<const T*
>(src));
237 #if __TBB_CPP11_RVALUE_REF_PRESENT
239 new( &
get_ref(dst,index) ) T(
std::move(*
static_cast<T*
>(
const_cast<void*
>(src))) );
251 #if __TBB_CPP11_RVALUE_REF_PRESENT
314 #if __TBB_CPP11_RVALUE_REF_PRESENT
338 template<
typename InputIterator>
355 #if __TBB_CPP11_RVALUE_REF_PRESENT
356 void push( T&& source ) {
361 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
362 template<
typename... Arguments>
364 push( T(std::forward<Arguments>( args )...) );
371 void pop( T& destination ) {
375 #if TBB_USE_EXCEPTIONS
389 #if __TBB_CPP11_RVALUE_REF_PRESENT
396 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT
397 template<
typename... Arguments>
399 return try_push( T(std::forward<Arguments>( args )...) );
451 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT
453 template<
typename InputIterator,
454 typename T =
typename std::iterator_traits<InputIterator>::value_type,
455 typename A = cache_aligned_allocator<T>
456 > concurrent_bounded_queue(InputIterator, InputIterator,
const A& = A())
457 -> concurrent_bounded_queue<T, A>;
460 template<
typename T,
class A>
463 internal_finish_clear();
466 template<
typename T,
class A>
469 while( try_pop(
value) ) ;
477 #undef __TBB_concurrent_queue_H_include_area
bool empty() const
Equivalent to size()==0.
void pop(T &destination)
Dequeue item from head of queue.
tbb::internal::allocator_rebind< A, char >::type page_allocator_type
void push(const T &source)
Enqueue an item at tail of queue.
const_iterator unsafe_begin() const
bool __TBB_EXPORTED_METHOD internal_push_move_if_not_full(const void *src)
Attempt to enqueue item onto queue using move operation.
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 ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
void __TBB_EXPORTED_METHOD assign(const concurrent_queue_base_v3 &src)
copy internal representation
size_t size_type
Integral type for representing size of the queue.
std::ptrdiff_t size_type
Integral type for representing size of the queue.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
bool __TBB_EXPORTED_METHOD internal_pop_if_present(void *dst)
Attempt to dequeue item from queue.
concurrent_bounded_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
[begin,end) constructor
Class used to ensure exception-safety of method "pop".
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
const_iterator unsafe_begin() const
const_iterator unsafe_end() const
bool internal_empty() const
check if the queue is empty; thread safe
Meets requirements of a forward iterator for STL.
bool try_push(const T &source)
Enqueue an item at tail of queue if queue is not already full.
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
virtual void move_item(page &dst, size_t index, const void *src) __TBB_override
static void copy_construct_item(T *location, const void *src)
const T & const_reference
Const reference type.
base class of concurrent_queue
void __TBB_EXPORTED_METHOD internal_abort()
Abort all pending queue operations.
void set_capacity(size_type new_capacity)
Set the capacity.
bool try_push(T &&source)
Move an item at tail of queue if queue is not already full.
ptrdiff_t difference_type
Difference type for iterator.
T & reference
Reference type.
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 ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp begin
void internal_swap(concurrent_queue_base_v3 &src)
swap internal representation
bool try_pop(T &destination)
Attempt to dequeue an item from head of queue.
page_allocator_type my_allocator
Allocator type.
concurrent_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
[begin,end) constructor
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
A high-performance thread-safe blocking concurrent bounded queue.
Meets requirements of a forward iterator for STL.
void __TBB_EXPORTED_METHOD internal_push(const void *src)
Enqueue item at tail of queue using copy operation.
virtual void assign_and_destroy_item(void *dst, page &src, size_t index) __TBB_override
virtual void move_page_item(page &dst, size_t dindex, const page &src, size_t sindex) __TBB_override
void push(const T &source)
Enqueue an item at tail of queue.
virtual void deallocate_page(page *p) __TBB_override
custom de-allocator
page_allocator_type my_allocator
size_t internal_size() const
Get size of queue; result may be invalid if queue is modified concurrently.
bool empty() const
Equivalent to size()<=0.
bool __TBB_EXPORTED_METHOD internal_empty() const
Check if the queue is empty.
A allocator_type
Allocator type.
allocator_traits< Alloc >::template rebind_alloc< T >::other type
size_type unsafe_size() const
Return the number of items in the queue; thread unsafe.
void emplace(Arguments &&... args)
ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const
Get size of queue.
A allocator_type
Allocator type.
concurrent_queue(const allocator_type &a=allocator_type())
Construct empty queue.
void assign(const concurrent_queue_base_v3 &src, item_constructor_t construct_item)
copy or move internal representation
virtual void deallocate_block(void *b, size_t n) __TBB_override
Deallocates block created by allocate_block.
concurrent_bounded_queue(concurrent_bounded_queue &&src, const allocator_type &a)
size_type capacity() const
Maximum number of allowed elements.
concurrent_queue(concurrent_queue &&src, const allocator_type &a)
void move(tbb_thread &t1, tbb_thread &t2)
void internal_swap(concurrent_queue_base_v3 &src)
swap queues
~concurrent_queue()
Destroy queue.
concurrent_queue_base_v3::padded_page< T > padded_page
internal::concurrent_queue_iterator< concurrent_bounded_queue, const T > const_iterator
T & get_ref(page &p, size_t index)
concurrent_bounded_queue(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())
Copy constructor.
void emplace(Arguments &&... args)
bool try_emplace(Arguments &&... args)
bool try_pop(T &result)
Attempt to dequeue an item from head of queue.
allocator_type get_allocator() const
return allocator object
void __TBB_EXPORTED_METHOD internal_pop(void *dst)
Dequeue item from head of queue.
size_t items_per_page
Always a power of 2.
void __TBB_EXPORTED_METHOD move_content(concurrent_queue_base_v8 &src)
move items
T & reference
Reference type.
concurrent_queue(const concurrent_queue &src, const allocator_type &a=allocator_type())
Copy constructor.
void clear()
clear the queue. not thread-safe.
internal::concurrent_queue_iterator< concurrent_queue, const T > const_iterator
concurrent_queue_base_v3::copy_specifics copy_specifics
virtual void * allocate_block(size_t n) __TBB_override
Allocates a block of size n (bytes)
Base class for types that should not be copied or assigned.
std::ptrdiff_t difference_type
Difference type for iterator.
tbb::internal::allocator_rebind< A, char >::type page_allocator_type
Allocator type.
T value_type
Element type in the queue.
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 ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
void __TBB_EXPORTED_METHOD internal_push_move(const void *src)
Enqueue item at tail of queue using move operation.
ptrdiff_t my_capacity
Capacity of the queue.
virtual void copy_page_item(page &dst, size_t dindex, const page &src, size_t sindex) __TBB_override
T value_type
Element type in the queue.
void __TBB_EXPORTED_METHOD internal_set_capacity(ptrdiff_t capacity, size_t element_size)
Set the queue capacity.
void internal_push(const void *src, item_constructor_t construct_item)
Enqueue item at tail of queue.
auto last(Container &c) -> decltype(begin(c))
const_iterator unsafe_end() const
void const char const char int ITT_FORMAT __itt_group_sync p
internal::concurrent_queue_iterator< concurrent_bounded_queue, T > iterator
void clear()
Clear the queue. not thread-safe.
A high-performance thread-safe non-blocking concurrent queue.
concurrent_bounded_queue(const allocator_type &a=allocator_type())
Construct empty queue.
size_type size() const
Return number of pushes minus number of pops.
bool internal_try_pop(void *dst)
Attempt to dequeue item from queue.
internal::concurrent_queue_iterator< concurrent_queue, T > iterator
static void move_construct_item(T *location, const void *src)
allocator_type get_allocator() const
Return allocator object.
bool __TBB_EXPORTED_METHOD internal_push_if_not_full(const void *src)
Attempt to enqueue item onto queue using copy operation.
virtual page * allocate_page() __TBB_override
custom allocator
virtual void copy_item(page &dst, size_t index, const void *src) __TBB_override
const T & const_reference
Const reference type.
~concurrent_bounded_queue()
Destroy queue.
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.