258 AbstractGangWorker* WorkGang::allocate_worker(uint worker_id) {
259 return new GangWorker(this, worker_id);
260 }
261
262 void WorkGang::run_task(AbstractGangTask* task) {
263 _dispatcher->coordinator_execute_on_workers(task, active_workers());
264 }
265
266 AbstractGangWorker::AbstractGangWorker(AbstractWorkGang* gang, uint id) {
267 _gang = gang;
268 set_id(id);
269 set_name("%s#%d", gang->name(), id);
270 }
271
272 void AbstractGangWorker::run() {
273 initialize();
274 loop();
275 }
276
277 void AbstractGangWorker::initialize() {
278 this->initialize_thread_local_storage();
279 this->record_stack_base_and_size();
280 this->initialize_named_thread();
281 assert(_gang != NULL, "No gang to run in");
282 os::set_priority(this, NearMaxPriority);
283 if (TraceWorkGang) {
284 tty->print_cr("Running gang worker for gang %s id %u",
285 gang()->name(), id());
286 }
287 // The VM thread should not execute here because MutexLocker's are used
288 // as (opposed to MutexLockerEx's).
289 assert(!Thread::current()->is_VM_thread(), "VM thread should not be part"
290 " of a work gang");
291 }
292
293 bool AbstractGangWorker::is_GC_task_thread() const {
294 return gang()->are_GC_task_threads();
295 }
296
297 bool AbstractGangWorker::is_ConcurrentGC_thread() const {
298 return gang()->are_ConcurrentGC_threads();
|
258 AbstractGangWorker* WorkGang::allocate_worker(uint worker_id) {
259 return new GangWorker(this, worker_id);
260 }
261
262 void WorkGang::run_task(AbstractGangTask* task) {
263 _dispatcher->coordinator_execute_on_workers(task, active_workers());
264 }
265
266 AbstractGangWorker::AbstractGangWorker(AbstractWorkGang* gang, uint id) {
267 _gang = gang;
268 set_id(id);
269 set_name("%s#%d", gang->name(), id);
270 }
271
272 void AbstractGangWorker::run() {
273 initialize();
274 loop();
275 }
276
277 void AbstractGangWorker::initialize() {
278 this->record_stack_base_and_size();
279 this->initialize_named_thread();
280 assert(_gang != NULL, "No gang to run in");
281 os::set_priority(this, NearMaxPriority);
282 if (TraceWorkGang) {
283 tty->print_cr("Running gang worker for gang %s id %u",
284 gang()->name(), id());
285 }
286 // The VM thread should not execute here because MutexLocker's are used
287 // as (opposed to MutexLockerEx's).
288 assert(!Thread::current()->is_VM_thread(), "VM thread should not be part"
289 " of a work gang");
290 }
291
292 bool AbstractGangWorker::is_GC_task_thread() const {
293 return gang()->are_GC_task_threads();
294 }
295
296 bool AbstractGangWorker::is_ConcurrentGC_thread() const {
297 return gang()->are_ConcurrentGC_threads();
|