changeset 38153:4f13f0b690c3

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
author tschatzl
date Mon, 02 May 2016 10:24:41 +0200
parents 80e5da81fb2c
children 4c30333c304e
files hotspot/src/share/vm/gc/shared/workgroup.cpp hotspot/src/share/vm/gc/shared/workgroup.hpp
diffstat 2 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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);