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