17 #ifndef __TBB__aggregator_H 18 #define __TBB__aggregator_H 20 #define __TBB_aggregator_H_include_area 23 #if !TBB_PREVIEW_AGGREGATOR 24 #error Set TBB_PREVIEW_AGGREGATOR before including aggregator.h 31 namespace interface6 {
55 virtual void apply_body() = 0;
61 template<
typename Body>
82 op_list = op_list->
next();
95 template <
typename handler_type>
98 aggregator_ext(
const handler_type&
h) : handler_busy(0), handle_operations(
h) { mailbox = NULL; }
121 }
while (mailbox.compare_and_swap(&op, res) != res);
126 start_handle_operations();
169 pending_operations = mailbox.fetch_and_store(NULL);
172 handle_operations(pending_operations);
186 template<
typename Body>
189 this->execute_impl(op);
195 using interface6::aggregator;
196 using interface6::aggregator_ext;
197 using interface6::aggregator_operation;
202 #undef __TBB_aggregator_H_include_area 204 #endif // __TBB__aggregator_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
aggregator_operation * next()
void call_itt_notify(notify_type, void *)
void set_next(aggregator_operation *n)
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 handler_busy
Controls thread access to handle_operations.
void operator()(aggregator_operation *op_list) const
handler_type handle_operations
Base class for types that should not be assigned.
void itt_store_word_with_release(tbb::atomic< T > &dst, U src)
aggregator_ext(const handler_type &h)
aggregator_operation_status
void process(aggregator_operation *op)
EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.
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)
T itt_hide_load_word(const T &src)
Basic aggregator interface.
void start()
Call start before handling this operation.
virtual void apply_body()=0
basic_operation(const Body &b)
atomic< aggregator_operation * > mailbox
An atomically updated list (aka mailbox) of aggregator_operations.
Base class for types that should not be copied or assigned.
void apply_body() __TBB_override
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
T itt_load_word_with_acquire(const tbb::atomic< T > &src)
void itt_hide_store_word(T &dst, T src)
Aggregator base class and expert interface.
void finish()
Call finish when done handling this operation.
void execute_impl(aggregator_operation &op)
virtual ~basic_operation_base()
Identifiers declared inside namespace internal should never be used directly by client code.
aggregator_operation * my_next
void start_handle_operations()
Trigger the handling of operations when the handler is free.
void execute(const Body &b)
BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.