Sử dụng invoke
combinator sau đây để áp dụng một chức năng để một giá trị trong một (forked) quá trình và sau đó chặn chờ đợi kết quả của nó khi giá trị ()
được áp dụng:
let invoke (f : 'a -> 'b) x : unit -> 'b =
let input, output = Unix.pipe() in
match Unix.fork() with
| -1 -> (let v = f x in fun() -> v)
| 0 ->
Unix.close input;
let output = Unix.out_channel_of_descr output in
Marshal.to_channel output (try `Res(f x) with e -> `Exn e) [];
close_out output;
exit 0
| pid ->
Unix.close output;
let input = Unix.in_channel_of_descr input in
fun() ->
let v = Marshal.from_channel input in
ignore (Unix.waitpid [] pid);
close_in input;
match v with
| `Res x -> x
| `Exn e -> raise e
Nguồn
2009-10-18 22:19:10
ocaml4multicore có sẵn (với giới hạn), xem: http://www.algo-prog.info/ocmc/web/ – nlucaroni