From 8afa5bb9d6e5a0f59d13bcdc9bc2e153c336445d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 13 Mar 2015 11:16:30 +0100 Subject: Commit uncommited stuff. --- src/kahn_pipe.ml | 26 ++++++++++++-------------- src/primes.ml | 13 +++++++------ 2 files changed, 19 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/kahn_pipe.ml b/src/kahn_pipe.ml index 2df8bc5..6e467ab 100644 --- a/src/kahn_pipe.ml +++ b/src/kahn_pipe.ml @@ -6,12 +6,11 @@ module Pipe: S = struct type 'a in_port = in_channel type 'a out_port = out_channel - let new_channel = - fun () -> + let new_channel () = let i, o = Unix.pipe () in Unix.in_channel_of_descr i, Unix.out_channel_of_descr o - let get (c : 'a in_port) : 'a = + let get c = fun () -> Marshal.from_channel c let put x c = @@ -60,17 +59,16 @@ module Pipe: S = struct let doco l = fun () -> - let children = - List.map - (fun p -> - match Unix.fork () with - | 0 -> - run p; - exit 0 - | i -> i) - l - in - List.iter + let launch p = + let pid = Unix.fork() in + if pid = 0 then begin + run p; + exit 0 + end else + pid + in + let children = List.map launch l in + List.iter (fun i -> try ignore(Unix.waitpid [] i) with _ -> ()) children end diff --git a/src/primes.ml b/src/primes.ml index 6975b9e..c5a1831 100644 --- a/src/primes.ml +++ b/src/primes.ml @@ -28,20 +28,21 @@ module Primes (K : Kahn.S) = struct (get qi) >>= (fun v -> if v <> -1 then begin - K.output @@ Format.sprintf "%d@." v; - (delay new_channel ()) >>= - (fun (qi2, qo2) -> doco [ filter v qi qo2 ; primes qi2 ]) + K.output (string_of_int v ^ "\n"); + let qi2, qo2 = new_channel () in + doco [ filter v qi qo2 ; primes qi2 ] end else return ()) let main : int process = - (delay new_channel ()) >>= - (fun (q_in, q_out) -> doco [ integers 2000 q_out ; primes q_in ]) + (return ()) >>= + (fun () -> let q_in, q_out = new_channel () in + doco [ integers 10000 q_out ; primes q_in ]) >>= (fun () -> return 42) end -module Eng = Kahn_seq.Seq +module Eng = Kahn_pipe.Pipe module P = Primes(Eng) let () = -- cgit v1.2.3