clarified/exported Future.worker_subgroup, which is already the default for Future.fork;
authorwenzelm
Wed, 21 Jul 2010 13:25:14 +0200
changeset 37865 3a6ec95a9f68
parent 37864 814b1bca7f35
child 37866 cd1d1bc7684c
clarified/exported Future.worker_subgroup, which is already the default for Future.fork;
src/Pure/Concurrent/future.ML
src/Pure/Concurrent/par_list.ML
src/Pure/Isar/toplevel.ML
--- a/src/Pure/Concurrent/future.ML	Tue Jul 20 23:16:21 2010 +0200
+++ b/src/Pure/Concurrent/future.ML	Wed Jul 21 13:25:14 2010 +0200
@@ -36,6 +36,7 @@
   val is_worker: unit -> bool
   val worker_task: unit -> Task_Queue.task option
   val worker_group: unit -> Task_Queue.group option
+  val worker_subgroup: unit -> Task_Queue.group
   type 'a future
   val task_of: 'a future -> task
   val group_of: 'a future -> group
@@ -83,8 +84,7 @@
 val is_worker = is_some o thread_data;
 val worker_task = Option.map #1 o thread_data;
 val worker_group = Option.map #2 o thread_data;
-
-fun new_group () = Task_Queue.new_group (worker_group ());
+fun worker_subgroup () = Task_Queue.new_group (worker_group ());
 
 
 (* datatype future *)
@@ -388,7 +388,7 @@
   let
     val group =
       (case opt_group of
-        NONE => new_group ()
+        NONE => worker_subgroup ()
       | SOME group => group);
     val (result, job) = future_job group e;
     val task = SYNCHRONIZED "enqueue" (fn () =>
@@ -490,7 +490,7 @@
       Unsynchronized.change_result queue (Task_Queue.enqueue_passive group abort));
   in Future {promised = true, task = task, group = group, result = result} end;
 
-fun promise () = promise_group (new_group ());
+fun promise () = promise_group (worker_subgroup ());
 
 fun fulfill_result (Future {promised, task, group, result}) res =
   let
--- a/src/Pure/Concurrent/par_list.ML	Tue Jul 20 23:16:21 2010 +0200
+++ b/src/Pure/Concurrent/par_list.ML	Wed Jul 21 13:25:14 2010 +0200
@@ -28,8 +28,8 @@
 
 fun raw_map f xs =
   if Multithreading.enabled () andalso not (Multithreading.self_critical ()) then
-    let val group = Task_Queue.new_group (Future.worker_group ())
-    in Future.join_results (map (fn x => Future.fork_group group (fn () => f x)) xs) end
+    let val shared_group = Task_Queue.new_group (Future.worker_group ())
+    in Future.join_results (map (fn x => Future.fork_group shared_group (fn () => f x)) xs) end
   else map (Exn.capture f) xs;
 
 fun map f xs = Exn.release_first (raw_map f xs);
--- a/src/Pure/Isar/toplevel.ML	Tue Jul 20 23:16:21 2010 +0200
+++ b/src/Pure/Isar/toplevel.ML	Wed Jul 21 13:25:14 2010 +0200
@@ -567,8 +567,7 @@
 fun async_state (tr as Transition {print, ...}) st =
   if print then
     ignore
-      (Future.fork_group (Task_Queue.new_group (Future.worker_group ()))
-        (fn () =>
+      (Future.fork (fn () =>
           setmp_thread_position tr (fn () => Future.report (fn () => print_state false st)) ()))
   else ();