Changeset 2b22e050 for src/libcfa/concurrency/kernel
- Timestamp:
- May 14, 2018, 8:45:23 AM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
- Children:
- a0cfa44
- Parents:
- 1dbc8590 (diff), 52df81c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/concurrency/kernel
r1dbc8590 r2b22e050 40 40 41 41 //----------------------------------------------------------------------------- 42 // Cluster 43 struct cluster { 44 // Ready queue locks 45 __spinlock_t ready_queue_lock; 42 // Processor 43 extern struct cluster * mainCluster; 46 44 47 // Ready queue for threads48 __queue_t(thread_desc) ready_queue;49 50 // Name of the cluster51 const char * name;52 53 // Preemption rate on this cluster54 Duration preemption_rate;55 56 // List of idle processors57 // __dllist_t(struct processor) idles;58 };59 60 extern struct cluster * mainCluster;61 extern Duration default_preemption();62 63 void ?{} (cluster & this, const char * name, Duration preemption_rate);64 void ^?{}(cluster & this);65 66 static inline void ?{} (cluster & this) { this{"Anonymous Cluster", default_preemption()}; }67 static inline void ?{} (cluster & this, Duration preemption_rate) { this{"Anonymous Cluster", preemption_rate}; }68 static inline void ?{} (cluster & this, const char * name) { this{name, default_preemption()}; }69 70 //-----------------------------------------------------------------------------71 // Processor72 45 enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule }; 73 46 … … 101 74 102 75 // Cluster from which to get threads 103 cluster * cltr;76 struct cluster * cltr; 104 77 105 78 // Name of the processor … … 127 100 bool pending_preemption; 128 101 102 // Idle lock 103 104 // Link lists fields 129 105 struct { 130 pthread_mutex_t lock;131 pthread_cond_t cond;132 } idle;106 struct processor * next; 107 struct processor * prev; 108 } node; 133 109 134 110 #ifdef __CFA_DEBUG__ … … 138 114 }; 139 115 140 void ?{}(processor & this, const char * name, cluster & cltr);116 void ?{}(processor & this, const char * name, struct cluster & cltr); 141 117 void ^?{}(processor & this); 142 118 143 119 static inline void ?{}(processor & this) { this{ "Anonymous Processor", *mainCluster}; } 144 static inline void ?{}(processor & this, cluster & cltr) { this{ "Anonymous Processor", cltr}; }120 static inline void ?{}(processor & this, struct cluster & cltr) { this{ "Anonymous Processor", cltr}; } 145 121 static inline void ?{}(processor & this, const char * name) { this{name, *mainCluster }; } 122 123 static inline [processor *&, processor *& ] __get( processor & this ) { 124 return this.node.[next, prev]; 125 } 126 127 //----------------------------------------------------------------------------- 128 // Cluster 129 struct cluster { 130 // Ready queue locks 131 __spinlock_t ready_queue_lock; 132 133 // Ready queue for threads 134 __queue_t(thread_desc) ready_queue; 135 136 // Name of the cluster 137 const char * name; 138 139 // Preemption rate on this cluster 140 Duration preemption_rate; 141 142 // List of processors 143 __spinlock_t proc_list_lock; 144 __dllist_t(struct processor) procs; 145 __dllist_t(struct processor) idles; 146 147 // Link lists fields 148 struct { 149 cluster * next; 150 cluster * prev; 151 } node; 152 }; 153 extern Duration default_preemption(); 154 155 void ?{} (cluster & this, const char * name, Duration preemption_rate); 156 void ^?{}(cluster & this); 157 158 static inline void ?{} (cluster & this) { this{"Anonymous Cluster", default_preemption()}; } 159 static inline void ?{} (cluster & this, Duration preemption_rate) { this{"Anonymous Cluster", preemption_rate}; } 160 static inline void ?{} (cluster & this, const char * name) { this{name, default_preemption()}; } 161 162 static inline [cluster *&, cluster *& ] __get( cluster & this ) { 163 return this.node.[next, prev]; 164 } 146 165 147 166 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.