Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let map_anon_memory n () =
- let fd = Unix.openfile "/dev/zero" [ Unix.O_RDWR ] 0 in
- let kind = Bigarray.Char in
- let layout = Bigarray.C_layout in
- let dims = [| n |] in
- let shared = true in
- let pos = None in
- let genarray = UnixLabels.map_file ?pos ~kind ~layout ~dims ~shared fd in
- Bigarray.array1_of_genarray genarray
- let spawn_child f () =
- let pid = Unix.fork () in
- if pid = 0 then (
- f () ;
- Unix._exit 0
- ) else pid
- let bench_concurrency () =
- let memory = map_anon_memory 1_000 () in
- let get n = memory.{n} in
- let set n c = memory.{n} <- c in
- let aux () =
- for i = 1 to 10 do (
- Unix.sleep 1 ;
- set 0 @@ Char.chr ((Char.code 'A') + i - 1) ;
- Format.printf "Child\tMemory 0 (%f): %c\n%!" (time ()) (get 0) ;
- ) done
- in
- let _pid = spawn_child aux () in
- for _ = 1 to 7 do
- Format.printf "Parent\tMemory 0 (%f): %c\n%!" (time ()) (get 0) ;
- Unix.sleep 2 ;
- done ;
- ()
- let () =
- bench_concurrency () ;
- ()
Advertisement
Add Comment
Please, Sign In to add comment