equal
deleted
inserted
replaced
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 |