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.
bool __TBB_EXPORTED_METHOD internal_push_if_not_full(const void *src)
Attempt to enqueue item onto queue using copy operation.
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
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
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.
concurrent_bounded_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
[begin,end) constructor
void assign(const concurrent_queue_base_v3 &src, item_constructor_t construct_item)
copy or move internal representation
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
void __TBB_EXPORTED_METHOD assign(const concurrent_queue_base_v3 &src)
copy internal representation
const typedef T & const_reference
Const reference type.
void __TBB_EXPORTED_METHOD internal_push(const void *src)
Enqueue item at tail of queue using copy operation.
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
bool __TBB_EXPORTED_METHOD internal_pop_if_present(void *dst)
Attempt to dequeue item from queue.
static void copy_construct_item(T *location, const void *src)
Container::iterator last(Container &c)
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
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.
bool __TBB_EXPORTED_METHOD internal_empty() const
Check if the queue is empty.
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.
base class of concurrent_queue
virtual void deallocate_page(page *p) __TBB_override
custom de-allocator
void __TBB_EXPORTED_METHOD internal_abort()
Abort all pending queue operations.
page_allocator_type my_allocator
bool empty() const
Equivalent to size()<=0.
A allocator_type
Allocator type.
size_type unsafe_size() const
Return the number of items in the queue; thread unsafe.
void emplace(Arguments &&... args)
A allocator_type
Allocator type.
concurrent_queue(const allocator_type &a=allocator_type())
Construct empty queue.
virtual void deallocate_block(void *b, size_t n) __TBB_override
Deallocates block created by allocate_block.
bool internal_empty() const
check if the queue is empty; thread safe
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 __TBB_EXPORTED_METHOD internal_pop(void *dst)
Dequeue item from head of queue.
ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const
Get size of queue.
~concurrent_queue()
Destroy queue.
concurrent_queue_base_v3::padded_page< T > padded_page
void __TBB_EXPORTED_METHOD internal_push_move(const void *src)
Enqueue item at tail of queue using move operation.
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 internal_try_pop(void *dst)
Attempt to dequeue item from queue.
bool try_pop(T &result)
Attempt to dequeue an item from head of queue.
allocator_type get_allocator() const
return allocator object
Meets requirements of a forward iterator for STL.
void internal_swap(concurrent_queue_base_v3 &src)
swap queues
size_t internal_size() const
Get size of queue; result may be invalid if queue is modified concurrently.
Base class for types that should not be copied or assigned.
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
void __TBB_EXPORTED_METHOD internal_set_capacity(ptrdiff_t capacity, size_t element_size)
Set the queue capacity.
virtual void * allocate_block(size_t n) __TBB_override
Allocates a block of size n (bytes)
std::ptrdiff_t difference_type
Difference type for iterator.
size_t items_per_page
Always a power of 2.
void __TBB_EXPORTED_METHOD move_content(concurrent_queue_base_v8 &src)
move items
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
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.
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.
const typedef T & const_reference
Const reference type.
concurrent_bounded_queue(const allocator_type &a=allocator_type())
Construct empty queue.
size_type size() const
Return number of pushes minus number of pops.
internal::concurrent_queue_iterator< concurrent_queue, T > iterator
bool __TBB_EXPORTED_METHOD internal_push_move_if_not_full(const void *src)
Attempt to enqueue item onto queue using move operation.
ptrdiff_t my_capacity
Capacity of the queue.
static void move_construct_item(T *location, const void *src)
allocator_type get_allocator() const
Return allocator object.
virtual page * allocate_page() __TBB_override
custom allocator
void internal_push(const void *src, item_constructor_t construct_item)
Enqueue item at tail of queue.
virtual void copy_item(page &dst, size_t index, const void *src) __TBB_override
allocator_traits< Alloc >::template rebind_alloc< T >::other type
void internal_swap(concurrent_queue_base_v3 &src)
swap internal representation
~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.