1
(* $Id: netmcore_sem.ml 1570 2011-04-08 14:47:16Z gerd $ *)
5
type semaphore = string
6
(* An empty string is a dummy sem. Otherwise, the string is on
7
the heap, and it contains the semaphore value *)
11
let create mut initval =
12
let s = String.create Netsys_posix.sem_size in
13
let s_heap = add mut s in
14
let s_addr = Netsys_mem.obj_address (Obj.repr s_heap) in
15
let m = Netsys_mem.grab s_addr Netsys_posix.sem_size in
16
ignore(Netsys_posix.sem_init m 0 true initval);
21
failwith "Netmcore_sem: cannot access dummy semaphore";
22
let s_addr = Netsys_mem.obj_address (Obj.repr s_heap) in
23
let m = Netsys_mem.grab s_addr Netsys_posix.sem_size in
24
Netsys_posix.as_sem m 0
27
if s_heap <> "" then (
28
let sem = get_sem s_heap in
29
Netsys_posix.sem_destroy sem
33
let sem = get_sem s_heap in
34
Netsys_posix.sem_getvalue sem
37
let sem = get_sem s_heap in
38
Netsys_posix.sem_post sem
41
let sem = get_sem s_heap in
42
Netsys.restart (Netsys_posix.sem_wait sem) swb