src/Pure/Concurrent/future.ML
changeset 43952 318ca53e3fbb
parent 43951 804783d6ee26
child 44110 058520fa03a8
equal deleted inserted replaced
43951:804783d6ee26 43952:318ca53e3fbb
   251     | some => (signal work_available; some));
   251     | some => (signal work_available; some));
   252 
   252 
   253 fun worker_loop name =
   253 fun worker_loop name =
   254   (case SYNCHRONIZED name (fn () => worker_next ()) of
   254   (case SYNCHRONIZED name (fn () => worker_next ()) of
   255     NONE => ()
   255     NONE => ()
   256   | SOME work => (execute work; worker_loop name));
   256   | SOME work => (Exn.capture Multithreading.interrupted (); execute work; worker_loop name));
   257 
   257 
   258 fun worker_start name = (*requires SYNCHRONIZED*)
   258 fun worker_start name = (*requires SYNCHRONIZED*)
   259   Unsynchronized.change workers (cons (Simple_Thread.fork false (fn () => worker_loop name),
   259   Unsynchronized.change workers (cons (Simple_Thread.fork false (fn () => worker_loop name),
   260     Unsynchronized.ref Working));
   260     Unsynchronized.ref Working));
   261 
   261