module Netmcore_process:Statically typed processessig
..end
Netmcore
.type 'a
fork_point
'a
type 'a
join_point
'b
val def_process : ('a -> 'b) -> 'a fork_point * 'b join_point
let (fp,jp) = def_process proc
: Defines a process (which must happen
in the master process), so that:
let pid = start fp arg
: Starts the new process and passes the
argument arg
to it. The process runs proc arg
which will
finally result in a value r
let r_opt = join jp pid
: Waits until the process identified by
pid
finishes, and returns the result as r_opt = Some r
.
On error, it returns None
.def_process
should be called at module initialization time
before any process is started. This interface is not designed for
calling def_process
later.val start : ?inherit_resources:Netmcore.inherit_request ->
'a fork_point -> 'a -> Netmcore.process_id
let pid = start fp arg
: Starts a new process at the fork point
fp
with argument arg
. This means that the process is forked
from the master process, and that the value of arg
is sent to it
using Marshal
. The returned process ID is Netmulticore's own
ID and not to be confused with the ID assigned by the operating
system.
Option inherit_resources
: Certain resources are only accessible by
the process when they are inherited to it. This is the case for
`Posix_shm_preallocated
. This can be set to `All
to inherit
all inheritable resources, or to `Resources l
to only inherit
the resources of l
. By default, no resources are inherited.
val join : 'a join_point -> Netmcore.process_id -> 'a option
let r_opt = join jp pid
: Waits until the process pid
finishes,
and uses the join point jp
to extract the result. The result
is returned as Some r
on success, and None
on error.
Result values are transmitted from the joining process to
this function using Marshal
. Errors include uncaught exceptions
as well as unexpected process termination (exit
, signal).
If the process referenced by pid
is not an instance that belongs
to jp
, the function will fail.
val release_fork_point : 'a fork_point -> unit
val release_join_point : 'a join_point -> unit