280 task->name(), num_workers, total_workers());
281 guarantee(num_workers > 0, "Trying to execute task %s with zero workers", task->name());
282 uint old_num_workers = _active_workers;
283 update_active_workers(num_workers);
284 _dispatcher->coordinator_execute_on_workers(task, num_workers);
285 update_active_workers(old_num_workers);
286 }
287
288 AbstractGangWorker::AbstractGangWorker(AbstractWorkGang* gang, uint id) {
289 _gang = gang;
290 set_id(id);
291 set_name("%s#%d", gang->name(), id);
292 }
293
294 void AbstractGangWorker::run() {
295 initialize();
296 loop();
297 }
298
299 void AbstractGangWorker::initialize() {
300 this->initialize_named_thread();
301 assert(_gang != NULL, "No gang to run in");
302 os::set_priority(this, NearMaxPriority);
303 log_develop_trace(gc, workgang)("Running gang worker for gang %s id %u", gang()->name(), id());
304 // The VM thread should not execute here because MutexLocker's are used
305 // as (opposed to MutexLockerEx's).
306 assert(!Thread::current()->is_VM_thread(), "VM thread should not be part"
307 " of a work gang");
308 }
309
310 bool AbstractGangWorker::is_GC_task_thread() const {
311 return gang()->are_GC_task_threads();
312 }
313
314 bool AbstractGangWorker::is_ConcurrentGC_thread() const {
315 return gang()->are_ConcurrentGC_threads();
316 }
317
318 void AbstractGangWorker::print_on(outputStream* st) const {
319 st->print("\"%s\" ", name());
320 Thread::print_on(st);
|
280 task->name(), num_workers, total_workers());
281 guarantee(num_workers > 0, "Trying to execute task %s with zero workers", task->name());
282 uint old_num_workers = _active_workers;
283 update_active_workers(num_workers);
284 _dispatcher->coordinator_execute_on_workers(task, num_workers);
285 update_active_workers(old_num_workers);
286 }
287
288 AbstractGangWorker::AbstractGangWorker(AbstractWorkGang* gang, uint id) {
289 _gang = gang;
290 set_id(id);
291 set_name("%s#%d", gang->name(), id);
292 }
293
294 void AbstractGangWorker::run() {
295 initialize();
296 loop();
297 }
298
299 void AbstractGangWorker::initialize() {
300 assert(_gang != NULL, "No gang to run in");
301 os::set_priority(this, NearMaxPriority);
302 log_develop_trace(gc, workgang)("Running gang worker for gang %s id %u", gang()->name(), id());
303 // The VM thread should not execute here because MutexLocker's are used
304 // as (opposed to MutexLockerEx's).
305 assert(!Thread::current()->is_VM_thread(), "VM thread should not be part"
306 " of a work gang");
307 }
308
309 bool AbstractGangWorker::is_GC_task_thread() const {
310 return gang()->are_GC_task_threads();
311 }
312
313 bool AbstractGangWorker::is_ConcurrentGC_thread() const {
314 return gang()->are_ConcurrentGC_threads();
315 }
316
317 void AbstractGangWorker::print_on(outputStream* st) const {
318 st->print("\"%s\" ", name());
319 Thread::print_on(st);
|