Mercurial > hg > truffle
comparison src/share/vm/utilities/yieldingWorkgroup.hpp @ 4970:33df1aeaebbf
Merge with http://hg.openjdk.java.net/hsx/hsx24/hotspot/
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 27 Feb 2012 13:10:13 +0100 |
parents | 441e946dc1af |
children | 32164d89fe9c |
comparison
equal
deleted
inserted
replaced
4703:2cfb7fb2dce7 | 4970:33df1aeaebbf |
---|---|
69 FlexibleGangTask(const char* name): AbstractGangTask(name), | 69 FlexibleGangTask(const char* name): AbstractGangTask(name), |
70 _requested_size(0) {} | 70 _requested_size(0) {} |
71 | 71 |
72 // The abstract work method. | 72 // The abstract work method. |
73 // The argument tells you which member of the gang you are. | 73 // The argument tells you which member of the gang you are. |
74 virtual void work(int i) = 0; | 74 virtual void work(uint worker_id) = 0; |
75 | 75 |
76 int requested_size() const { return _requested_size; } | 76 int requested_size() const { return _requested_size; } |
77 int actual_size() const { return _actual_size; } | 77 int actual_size() const { return _actual_size; } |
78 | 78 |
79 void set_requested_size(int sz) { _requested_size = sz; } | 79 void set_requested_size(int sz) { _requested_size = sz; } |
126 } | 126 } |
127 | 127 |
128 public: | 128 public: |
129 // The abstract work method. | 129 // The abstract work method. |
130 // The argument tells you which member of the gang you are. | 130 // The argument tells you which member of the gang you are. |
131 virtual void work(int i) = 0; | 131 virtual void work(uint worker_id) = 0; |
132 | 132 |
133 // Subclasses should call the parent's yield() method | 133 // Subclasses should call the parent's yield() method |
134 // after having done any work specific to the subclass. | 134 // after having done any work specific to the subclass. |
135 virtual void yield(); | 135 virtual void yield(); |
136 | 136 |
157 // being the thread that orchestrates the WorkGang via run_task(). | 157 // being the thread that orchestrates the WorkGang via run_task(). |
158 class YieldingFlexibleWorkGang: public FlexibleWorkGang { | 158 class YieldingFlexibleWorkGang: public FlexibleWorkGang { |
159 // Here's the public interface to this class. | 159 // Here's the public interface to this class. |
160 public: | 160 public: |
161 // Constructor and destructor. | 161 // Constructor and destructor. |
162 YieldingFlexibleWorkGang(const char* name, int workers, | 162 YieldingFlexibleWorkGang(const char* name, uint workers, |
163 bool are_GC_task_threads); | 163 bool are_GC_task_threads); |
164 | 164 |
165 YieldingFlexibleGangTask* yielding_task() const { | 165 YieldingFlexibleGangTask* yielding_task() const { |
166 assert(task() == NULL || task()->is_YieldingFlexibleGang_task(), | 166 assert(task() == NULL || task()->is_YieldingFlexibleGang_task(), |
167 "Incorrect cast"); | 167 "Incorrect cast"); |
168 return (YieldingFlexibleGangTask*)task(); | 168 return (YieldingFlexibleGangTask*)task(); |
169 } | 169 } |
170 // Allocate a worker and return a pointer to it. | 170 // Allocate a worker and return a pointer to it. |
171 GangWorker* allocate_worker(int which); | 171 GangWorker* allocate_worker(uint which); |
172 | 172 |
173 // Run a task; returns when the task is done, or the workers yield, | 173 // Run a task; returns when the task is done, or the workers yield, |
174 // or the task is aborted, or the work gang is terminated via stop(). | 174 // or the task is aborted, or the work gang is terminated via stop(). |
175 // A task that has been yielded can be continued via this same interface | 175 // A task that has been yielded can be continued via this same interface |
176 // by using the same task repeatedly as the argument to the call. | 176 // by using the same task repeatedly as the argument to the call. |
197 // stations, whence they are ready for the next task dispatched | 197 // stations, whence they are ready for the next task dispatched |
198 // by the overseer. | 198 // by the overseer. |
199 void abort(); | 199 void abort(); |
200 | 200 |
201 private: | 201 private: |
202 int _yielded_workers; | 202 uint _yielded_workers; |
203 void wait_for_gang(); | 203 void wait_for_gang(); |
204 | 204 |
205 public: | 205 public: |
206 // Accessors for fields | 206 // Accessors for fields |
207 int yielded_workers() const { | 207 uint yielded_workers() const { |
208 return _yielded_workers; | 208 return _yielded_workers; |
209 } | 209 } |
210 | 210 |
211 private: | 211 private: |
212 friend class YieldingFlexibleGangWorker; | 212 friend class YieldingFlexibleGangWorker; |