1 (* Title: Pure/ML-Systems/multithreading.ML
5 Dummy implementation of multithreading interface.
8 signature BASIC_MULTITHREADING =
10 val NAMED_CRITICAL: string -> (unit -> 'a) -> 'a
11 val CRITICAL: (unit -> 'a) -> 'a
14 signature MULTITHREADING =
16 include BASIC_MULTITHREADING
18 val tracing: int -> (unit -> string) -> unit
20 val max_threads: int ref
21 val self_critical: unit -> bool
23 Task of {body: unit -> unit, cont: 'a -> 'a, fail: 'a -> 'a} | Wait | Terminate;
24 val schedule: int -> ('a -> 'a task * 'a) -> 'a -> exn list
25 val serial: unit -> int
28 structure Multithreading: MULTITHREADING =
31 val trace = ref (0: int);
34 val available = false;
35 val max_threads = ref (1: int);
37 fun self_critical () = false;
38 fun NAMED_CRITICAL _ e = e ();
39 fun CRITICAL e = e ();
42 Task of {body: unit -> unit, cont: 'a -> 'a, fail: 'a -> 'a} | Wait | Terminate;
44 fun schedule _ _ _ = raise Fail "No multithreading support";
46 local val count = ref (0: int)
47 in fun serial () = (count := ! count + 1; ! count) end;
51 structure BasicMultithreading: BASIC_MULTITHREADING = Multithreading;
52 open BasicMultithreading;