Guest User

Untitled

a guest
May 8th, 2022
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.99 KB | None | 0 0
  1. let map_anon_memory n () =
  2.   let fd = Unix.openfile "/dev/zero" [ Unix.O_RDWR ] 0 in
  3.   let kind = Bigarray.Char in
  4.   let layout = Bigarray.C_layout in
  5.   let dims = [| n |] in
  6.   let shared = true in
  7.   let pos = None in
  8.   let genarray = UnixLabels.map_file ?pos ~kind ~layout ~dims ~shared fd in
  9.   Bigarray.array1_of_genarray genarray
  10.  
  11. let spawn_child f () =
  12.   let pid = Unix.fork () in
  13.   if pid = 0 then (
  14.     f () ;
  15.     Unix._exit 0
  16.   ) else pid
  17.  
  18. let bench_concurrency () =
  19.   let memory = map_anon_memory 1_000 () in
  20.   let get n = memory.{n} in
  21.   let set n c = memory.{n} <- c in
  22.   let aux () =
  23.     for i = 1 to 10 do (
  24.       Unix.sleep 1 ;
  25.       set 0 @@ Char.chr ((Char.code 'A') + i - 1) ;
  26.       Format.printf "Child\tMemory 0 (%f): %c\n%!" (time ()) (get 0) ;
  27.     ) done
  28.   in
  29.   let _pid = spawn_child aux () in
  30.   for _ = 1 to 7  do
  31.     Format.printf "Parent\tMemory 0 (%f): %c\n%!" (time ()) (get 0) ;
  32.     Unix.sleep 2 ;
  33.   done ;
  34.   ()
  35.  
  36. let () =
  37.   bench_concurrency () ;
  38.   ()
Advertisement
Add Comment
Please, Sign In to add comment