File: Test164.ML

package info (click to toggle)
polyml 5.7.1-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 40,616 kB
  • sloc: cpp: 44,142; ansic: 26,963; sh: 22,002; asm: 13,486; makefile: 602; exp: 525; python: 253; awk: 91
file content (25 lines) | stat: -rw-r--r-- 586 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(* This example gets the compiler into a loop repeatedly trying to
   re-optimise the function.  We need to add a time-out thread to
   interrupt it. *)

val m = Thread.Mutex.mutex();
local
    open Thread.Thread Thread.Mutex
    fun thrd () =
    (
        OS.Process.sleep(Time.fromSeconds 5);
        lock m;
        broadcastInterrupt();
        unlock m
    )
in
    val t = fork(thrd, [])
end;

(* This is the actual code. *)
datatype chain = Link of (int * (int -> chain));
fun ints(n) = Link(n+1, ints);


Thread.Mutex.lock m;
Thread.Thread.kill t handle Thread.Thread _ => ();