8155232: Augment Workgang to run task with a given number of threads
Summary: Add a method to run a WorkGang with a set number of threads.
Reviewed-by: stefank, jmasa, mgerdin
--- a/hotspot/src/share/vm/gc/shared/workgroup.cpp Sun May 01 12:47:00 2016 +0300
+++ b/hotspot/src/share/vm/gc/shared/workgroup.cpp Mon May 02 10:24:41 2016 +0200
@@ -255,7 +255,15 @@
}
void WorkGang::run_task(AbstractGangTask* task) {
- _dispatcher->coordinator_execute_on_workers(task, active_workers());
+ run_task(task, active_workers());
+}
+
+void WorkGang::run_task(AbstractGangTask* task, uint num_workers) {
+ guarantee(num_workers <= active_workers(),
+ "Trying to execute task %s with %u workers which is more than the amount of active workers %u.",
+ task->name(), num_workers, active_workers());
+ guarantee(num_workers > 0, "Trying to execute task %s with zero workers", task->name());
+ _dispatcher->coordinator_execute_on_workers(task, num_workers);
}
AbstractGangWorker::AbstractGangWorker(AbstractWorkGang* gang, uint id) {
--- a/hotspot/src/share/vm/gc/shared/workgroup.hpp Sun May 01 12:47:00 2016 +0300
+++ b/hotspot/src/share/vm/gc/shared/workgroup.hpp Mon May 02 10:24:41 2016 +0200
@@ -192,8 +192,12 @@
bool are_GC_task_threads,
bool are_ConcurrentGC_threads);
- // Run a task, returns when the task is done.
+ // Run a task using the current active number of workers, returns when the task is done.
virtual void run_task(AbstractGangTask* task);
+ // Run a task with the given number of workers, returns
+ // when the task is done. The number of workers must be at most the number of
+ // active workers.
+ void run_task(AbstractGangTask* task, uint num_workers);
protected:
virtual AbstractGangWorker* allocate_worker(uint which);