- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/monitor.hfa
r58b6d1b rac2b598 10 10 // Created On : Thd Feb 23 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Oct 7 18:06:45 201713 // Update Count : 1 012 // Last Modified On : Wed Dec 4 07:55:32 2019 13 // Update Count : 11 14 14 // 15 15 … … 23 23 24 24 trait is_monitor(dtype T) { 25 monitor_desc* get_monitor( T & );25 $monitor * get_monitor( T & ); 26 26 void ^?{}( T & mutex ); 27 27 }; 28 28 29 static inline void ?{}( monitor_desc& this) with( this ) {29 static inline void ?{}($monitor & this) with( this ) { 30 30 lock{}; 31 31 entry_queue{}; 32 32 signal_stack{}; 33 owner = NULL;33 owner = 0p; 34 34 recursion = 0; 35 mask.accepted = NULL;36 mask.data = NULL;35 mask.accepted = 0p; 36 mask.data = 0p; 37 37 mask.size = 0; 38 dtor_node = NULL;38 dtor_node = 0p; 39 39 } 40 40 41 static inline void ^?{}($monitor & ) {} 42 41 43 struct monitor_guard_t { 42 monitor_desc** m;44 $monitor ** m; 43 45 __lock_size_t count; 44 46 __monitor_group_t prev; 45 47 }; 46 48 47 void ?{}( monitor_guard_t & this, monitor_desc** m, __lock_size_t count, void (*func)() );49 void ?{}( monitor_guard_t & this, $monitor ** m, __lock_size_t count, void (*func)() ); 48 50 void ^?{}( monitor_guard_t & this ); 49 51 50 52 struct monitor_dtor_guard_t { 51 monitor_desc* m;53 $monitor * m; 52 54 __monitor_group_t prev; 53 55 }; 54 56 55 void ?{}( monitor_dtor_guard_t & this, monitor_desc** m, void (*func)() );57 void ?{}( monitor_dtor_guard_t & this, $monitor ** m, void (*func)() ); 56 58 void ^?{}( monitor_dtor_guard_t & this ); 57 59 … … 70 72 71 73 // The monitor this criterion concerns 72 monitor_desc* target;74 $monitor * target; 73 75 74 76 // The parent node to which this criterion belongs … … 85 87 struct __condition_node_t { 86 88 // Thread that needs to be woken when all criteria are met 87 thread_desc* waiting_thread;89 $thread * waiting_thread; 88 90 89 91 // Array of criteria (Criterions are contiguous in memory) … … 104 106 } 105 107 106 void ?{}(__condition_node_t & this, thread_desc* waiting_thread, __lock_size_t count, uintptr_t user_info );108 void ?{}(__condition_node_t & this, $thread * waiting_thread, __lock_size_t count, uintptr_t user_info ); 107 109 void ?{}(__condition_criterion_t & this ); 108 void ?{}(__condition_criterion_t & this, monitor_desc* target, __condition_node_t * owner );110 void ?{}(__condition_criterion_t & this, $monitor * target, __condition_node_t * owner ); 109 111 110 112 struct condition { … … 113 115 114 116 // Array of monitor pointers (Monitors are NOT contiguous in memory) 115 monitor_desc** monitors;117 $monitor ** monitors; 116 118 117 119 // Number of monitors in the array … … 120 122 121 123 static inline void ?{}( condition & this ) { 122 this.monitors = NULL;124 this.monitors = 0p; 123 125 this.monitor_count = 0; 124 126 } … … 131 133 bool signal ( condition & this ); 132 134 bool signal_block( condition & this ); 133 static inline bool is_empty ( condition & this ) { return !this.blocked.head; }135 static inline bool is_empty ( condition & this ) { return this.blocked.head == 1p; } 134 136 uintptr_t front ( condition & this ); 135 137
Note:
See TracChangeset
for help on using the changeset viewer.