2009-08-17 5 views

Trả lời

3

Hiện tại, cách duy nhất để làm điều đó là với Bộ KH & ĐT và bạn có thể tìm thấy các ràng buộc ocaml cho nó trên Xavier Leroy's website.

+2

ocaml4multicore có sẵn (với giới hạn), xem: http://www.algo-prog.info/ocmc/web/ – nlucaroni

8

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