21 #ifndef _TBB_observer_proxy_H 22 #define _TBB_observer_proxy_H 24 #if __TBB_SCHEDULER_OBSERVER 39 typedef aligned_space<spin_rw_mutex> my_mutex_type;
42 observer_proxy* my_head;
45 observer_proxy* my_tail;
48 my_mutex_type my_mutex;
55 inline static void remove_ref_fast( observer_proxy*&
p );
58 void do_notify_entry_observers( observer_proxy*&
last,
bool worker );
61 void do_notify_exit_observers( observer_proxy*
last,
bool worker );
64 observer_list () : my_head(NULL), my_tail(NULL) {}
71 void insert ( observer_proxy*
p );
74 void remove ( observer_proxy*
p );
78 void remove_ref( observer_proxy*
p );
81 typedef spin_rw_mutex::scoped_lock scoped_lock;
86 bool empty ()
const {
return my_head == NULL; }
91 inline void notify_entry_observers( observer_proxy*&
last,
bool worker );
94 inline void notify_exit_observers( observer_proxy*&
last,
bool worker );
101 class observer_proxy {
102 friend class task_scheduler_observer_v3;
103 friend class observer_list;
108 atomic<int> my_ref_count;
110 observer_list* my_list;
113 observer_proxy* my_next;
116 observer_proxy* my_prev;
118 task_scheduler_observer_v3* my_observer;
122 #if __TBB_ARENA_OBSERVER 123 interface6::task_scheduler_observer* get_v6_observer();
125 #if __TBB_ARENA_OBSERVER 130 observer_proxy( task_scheduler_observer_v3& );
137 observer_proxy& operator = (
const observer_proxy& );
140 inline void observer_list::remove_ref_fast( observer_proxy*&
p ) {
141 if(
p->my_observer ) {
143 int r = --
p->my_ref_count;
151 inline void observer_list::notify_entry_observers( observer_proxy*&
last,
bool worker ) {
152 if (
last == my_tail )
154 do_notify_entry_observers(
last, worker );
157 inline void observer_list::notify_exit_observers( observer_proxy*&
last,
bool worker ) {
161 do_notify_exit_observers(
last, worker );
166 extern padded<observer_list> the_global_observer_list;
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
#define __TBB_ASSERT_EX(predicate, comment)
"Extended" version is useful to suppress warnings if a variable is only used with an assert
void const char const char int ITT_FORMAT __itt_group_sync p
auto last(Container &c) -> decltype(begin(c))
spin_rw_mutex_v3 spin_rw_mutex