Task_Queue.dequeue: explicit thread;
authorwenzelm
Tue, 28 Jul 2009 14:35:27 +0200
changeset 322533e48bf962e05
parent 32252 0241916a5f06
child 32254 3c28e4e578ad
Task_Queue.dequeue: explicit thread;
src/Pure/Concurrent/future.ML
src/Pure/Concurrent/task_queue.ML
     1.1 --- a/src/Pure/Concurrent/future.ML	Tue Jul 28 14:29:25 2009 +0200
     1.2 +++ b/src/Pure/Concurrent/future.ML	Tue Jul 28 14:35:27 2009 +0200
     1.3 @@ -210,7 +210,7 @@
     1.4    else if count_active () > Multithreading.max_threads_value () then
     1.5      (worker_wait scheduler_event; worker_next ())
     1.6    else
     1.7 -    (case change_result queue Task_Queue.dequeue of
     1.8 +    (case change_result queue (Task_Queue.dequeue (Thread.self ())) of
     1.9        NONE => (worker_wait work_available; worker_next ())
    1.10      | some => some);
    1.11  
    1.12 @@ -346,7 +346,7 @@
    1.13  fun join_next deps = (*requires SYNCHRONIZED*)
    1.14    if null deps then NONE
    1.15    else
    1.16 -    (case change_result queue (Task_Queue.dequeue_towards deps) of
    1.17 +    (case change_result queue (Task_Queue.dequeue_towards (Thread.self ()) deps) of
    1.18        (NONE, []) => NONE
    1.19      | (NONE, deps') => (worker_wait work_finished; join_next deps')
    1.20      | (SOME work, deps') => SOME (work, deps'));
     2.1 --- a/src/Pure/Concurrent/task_queue.ML	Tue Jul 28 14:29:25 2009 +0200
     2.2 +++ b/src/Pure/Concurrent/task_queue.ML	Tue Jul 28 14:35:27 2009 +0200
     2.3 @@ -26,8 +26,8 @@
     2.4    val cancel_all: queue -> group list
     2.5    val enqueue: group -> task list -> int -> (bool -> bool) -> queue -> (task * bool) * queue
     2.6    val extend: task -> (bool -> bool) -> queue -> queue option
     2.7 -  val dequeue: queue -> (task * group * (bool -> bool) list) option * queue
     2.8 -  val dequeue_towards: task list -> queue ->
     2.9 +  val dequeue: Thread.thread -> queue -> (task * group * (bool -> bool) list) option * queue
    2.10 +  val dequeue_towards: Thread.thread -> task list -> queue ->
    2.11      (((task * group * (bool -> bool) list) option * task list) * queue)
    2.12    val finish: task -> queue -> bool * queue
    2.13  end;
    2.14 @@ -179,7 +179,7 @@
    2.15  
    2.16  (* dequeue *)
    2.17  
    2.18 -fun dequeue (queue as Queue {groups, jobs, cache}) =
    2.19 +fun dequeue thread (queue as Queue {groups, jobs, cache}) =
    2.20    let
    2.21      fun ready (task, ((group, Job list), ([], _))) = SOME (task, group, rev list)
    2.22        | ready _ = NONE;
    2.23 @@ -188,7 +188,7 @@
    2.24          NONE => (NONE, make_queue groups jobs No_Result)
    2.25        | SOME (result as (task, _, _)) =>
    2.26            let
    2.27 -            val jobs' = set_job task (Running (Thread.self ())) jobs;
    2.28 +            val jobs' = set_job task (Running thread) jobs;
    2.29              val cache' = Result task;
    2.30            in (SOME result, make_queue groups jobs' cache') end);
    2.31    in
    2.32 @@ -201,7 +201,7 @@
    2.33  
    2.34  (* dequeue_towards -- adhoc dependencies *)
    2.35  
    2.36 -fun dequeue_towards deps (queue as Queue {groups, jobs, ...}) =
    2.37 +fun dequeue_towards thread deps (queue as Queue {groups, jobs, ...}) =
    2.38    let
    2.39      fun ready task =
    2.40        (case Task_Graph.get_node jobs task of
    2.41 @@ -213,7 +213,7 @@
    2.42      val tasks = filter (can (Task_Graph.get_node jobs)) deps;
    2.43      fun result (res as (task, _, _)) =
    2.44        let
    2.45 -        val jobs' = set_job task (Running (Thread.self ())) jobs;
    2.46 +        val jobs' = set_job task (Running thread) jobs;
    2.47          val cache' = Unknown;
    2.48        in ((SOME res, tasks), make_queue groups jobs' cache') end;
    2.49    in