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> >
230 return (&static_cast<padded_page*>(static_cast<void*>(&
p))->
last)[index];
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))) );
248 new( &
get_ref(dst,dindex) ) T(
get_ref( const_cast<page&>(src), sindex ) );
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 __TBB_EXPORTED_METHOD internal_push_move_if_not_full(const void *src)
Attempt to enqueue item onto queue using move operation.
bool try_emplace(Arguments &&... args)
A allocator_type
Allocator type.
bool __TBB_EXPORTED_METHOD internal_empty() const
Check if the queue is empty.
concurrent_queue(const allocator_type &a=allocator_type())
Construct empty queue.
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
concurrent_queue(const concurrent_queue &src, const allocator_type &a=allocator_type())
Copy constructor.
ptrdiff_t my_capacity
Capacity of the queue.
internal::concurrent_queue_iterator< concurrent_bounded_queue, const T > const_iterator
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
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
virtual page * allocate_page() __TBB_override
custom allocator
void __TBB_EXPORTED_METHOD internal_set_capacity(ptrdiff_t capacity, size_t element_size)
Set the queue capacity.
void clear()
clear the queue. not thread-safe.
void move(tbb_thread &t1, tbb_thread &t2)
const_iterator unsafe_begin() const
void const char const char int ITT_FORMAT __itt_group_sync p
bool empty() const
Equivalent to size()<=0.
void emplace(Arguments &&... args)
tbb::internal::allocator_rebind< A, char >::type page_allocator_type
void __TBB_EXPORTED_METHOD internal_push_move(const void *src)
Enqueue item at tail of queue using move operation.
A allocator_type
Allocator type.
void __TBB_EXPORTED_METHOD internal_pop(void *dst)
Dequeue item from head of queue.
auto last(Container &c) -> decltype(begin(c))
void __TBB_EXPORTED_METHOD move_content(concurrent_queue_base_v8 &src)
move items
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
concurrent_bounded_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
[begin,end) constructor
~concurrent_bounded_queue()
Destroy queue.
void internal_push(const void *src, item_constructor_t construct_item)
Enqueue item at tail of queue.
concurrent_queue_base_v3::copy_specifics copy_specifics
void __TBB_EXPORTED_METHOD internal_abort()
Abort all pending queue operations.
T & reference
Reference type.
internal::concurrent_queue_iterator< concurrent_queue, const T > const_iterator
internal::concurrent_queue_iterator< concurrent_queue, T > iterator
const typedef T & const_reference
Const reference type.
ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const
Get size of 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
concurrent_bounded_queue(const allocator_type &a=allocator_type())
Construct empty queue.
virtual void assign_and_destroy_item(void *dst, page &src, size_t index) __TBB_override
concurrent_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
[begin,end) constructor
virtual void move_page_item(page &dst, size_t dindex, const page &src, size_t sindex) __TBB_override
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
std::ptrdiff_t size_type
Integral type for representing size of the queue.
internal::concurrent_queue_iterator< concurrent_bounded_queue, T > iterator
void clear()
Clear the queue. not thread-safe.
virtual void deallocate_block(void *b, size_t n) __TBB_override
Deallocates block created by allocate_block.
bool empty() const
Equivalent to size()==0.
std::ptrdiff_t difference_type
Difference type for iterator.
concurrent_queue_base_v3::padded_page< T > padded_page
Meets requirements of a forward iterator for STL.
concurrent_queue(concurrent_queue &&src, const allocator_type &a)
ptrdiff_t difference_type
Difference type for iterator.
void push(const T &source)
Enqueue an item at tail of queue.
size_t items_per_page
Always a power of 2.
allocator_traits< Alloc >::template rebind_alloc< T >::other type
const_iterator unsafe_end() const
allocator_type get_allocator() const
Return allocator object.
bool internal_try_pop(void *dst)
Attempt to dequeue item from queue.
tbb::internal::allocator_rebind< A, char >::type page_allocator_type
Allocator type.
void internal_swap(concurrent_queue_base_v3 &src)
swap queues
Meets requirements of a forward iterator for STL.
bool try_pop(T &destination)
Attempt to dequeue an item from head of queue.
void emplace(Arguments &&... args)
virtual void * allocate_block(size_t n) __TBB_override
Allocates a block of size n (bytes)
bool try_push(T &&source)
Move an item at tail of queue if queue is not already full.
size_type size() const
Return number of pushes minus number of pops.
~concurrent_queue()
Destroy queue.
concurrent_bounded_queue(concurrent_bounded_queue &&src, const allocator_type &a)
size_t internal_size() const
Get size of queue; result may be invalid if queue is modified concurrently.
bool try_push(const T &source)
Enqueue an item at tail of queue if queue is not already full.
const_iterator unsafe_end() const
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
const typedef T & const_reference
Const reference type.
static void move_construct_item(T *location, const void *src)
bool __TBB_EXPORTED_METHOD internal_pop_if_present(void *dst)
Attempt to dequeue item from queue.
size_t size_type
Integral type for representing size of the queue.
bool try_pop(T &result)
Attempt to dequeue an item from head of queue.
virtual void deallocate_page(page *p) __TBB_override
custom de-allocator
const_iterator unsafe_begin() const
T & get_ref(page &p, size_t index)
A high-performance thread-safe blocking concurrent bounded queue.
void pop(T &destination)
Dequeue item from head of queue.
bool __TBB_EXPORTED_METHOD internal_push_if_not_full(const void *src)
Attempt to enqueue item onto queue using copy operation.
bool internal_empty() const
check if the queue is empty; thread safe
page_allocator_type my_allocator
void __TBB_EXPORTED_METHOD internal_push(const void *src)
Enqueue item at tail of queue using copy operation.
T & reference
Reference type.
Class used to ensure exception-safety of method "pop".
concurrent_bounded_queue(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())
Copy constructor.
size_type unsafe_size() const
Return the number of items in the queue; thread unsafe.
Base class for types that should not be copied or assigned.
void set_capacity(size_type new_capacity)
Set the capacity.
void assign(const concurrent_queue_base_v3 &src, item_constructor_t construct_item)
copy or move internal representation
base class of concurrent_queue
virtual void copy_item(page &dst, size_t index, const void *src) __TBB_override
virtual void copy_page_item(page &dst, size_t dindex, const page &src, size_t sindex) __TBB_override
size_type capacity() const
Maximum number of allowed elements.
T value_type
Element type in the queue.
void internal_swap(concurrent_queue_base_v3 &src)
swap internal representation
void push(const T &source)
Enqueue an item at tail of queue.
A high-performance thread-safe non-blocking concurrent queue.
page_allocator_type my_allocator
Allocator type.
virtual void move_item(page &dst, size_t index, const void *src) __TBB_override
void __TBB_EXPORTED_METHOD assign(const concurrent_queue_base_v3 &src)
copy internal representation
static void copy_construct_item(T *location, const void *src)
T value_type
Element type in the queue.
allocator_type get_allocator() const
return allocator object
Copyright © 2005-2019 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.