17 #ifndef __TBB__aggregator_impl_H 18 #define __TBB__aggregator_impl_H 20 #include "../atomic.h" 21 #if !__TBBMALLOC_BUILD 22 #include "../tbb_profiling.h" 26 namespace interface6 {
32 template <
typename Derived>
48 template <
typename operation_type >
63 template <
typename handler_type >
64 void execute(operation_type *op, handler_type &handle_operations,
bool long_life_time =
true) {
69 const uintptr_t status = op->status;
81 op->next = res = pending_operations;
82 }
while (pending_operations.compare_and_swap(op, res) != res);
88 start_handle_operations(handle_operations);
95 __TBB_ASSERT(long_life_time,
"Waiting for an operation object that might be destroyed during processing.");
109 template <
typename handler_type >
111 operation_type *op_list;
133 op_list = pending_operations.fetch_and_store(NULL);
136 handle_operations(op_list);
143 template <
typename handler_type,
typename operation_type >
159 template<
typename aggregating_
class,
typename operation_list>
161 aggregating_class *
fi;
165 void operator()(operation_list* op_list) { fi->handle_operations(op_list); }
172 using interface6::internal::aggregated_operation;
173 using interface6::internal::aggregator_generic;
174 using interface6::internal::aggregator;
175 using interface6::internal::aggregating_functor;
180 #endif // __TBB__aggregator_impl_H 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 h
void call_itt_notify(notify_type, void *)
void spin_wait_while_eq(const volatile T &location, U value)
Spin WHILE the value of the variable is equal to a given value.
uintptr_t status
Zero value means "wait" status, all other values are "user" specified values and are defined into the...
void itt_store_word_with_release(tbb::atomic< T > &dst, U src)
void operator()(operation_list *op_list)
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.
void __TBB_store_with_release(volatile T &location, V value)
void execute(operation_type *op)
aggregator(handler_type h)
void start_handle_operations(handler_type &handle_operations)
Trigger the handling of operations when the handler is free.
aggregated_operation base class
uintptr_t handler_busy
Controls thread access to handle_operations.
void initialize_handler(handler_type h)
void execute(operation_type *op, handler_type &handle_operations, bool long_life_time=true)
Execute an operation.
aggregating_functor(aggregating_class *fi_)
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
T itt_load_word_with_acquire(const tbb::atomic< T > &src)
Identifiers declared inside namespace internal should never be used directly by client code.
atomic< operation_type * > pending_operations
An atomically updated list (aka mailbox) of pending operations.
handler_type handle_operations