Module Domain
: sigendAlertunstable. The Domain interface may change in incompatible ways in the future.
Domains.
See 'Parallel programming' chapter in the manual.
type!'at
A domain of type 'at runs independently, eventually producing a result of type 'a, or an exception
valspawn : (unit->'a)->'atspawnf creates a new domain that runs in parallel with the current domain.
RaisesFailure if the program has insufficient resources to create another domain.
valjoin : 'at->'ajoind blocks until domain d runs to completion. If d results in a value, then that is returned by joind
. If d raises an uncaught exception, then that is re-raised by joind .
typeid = private int
Domains have unique integer identifiers
valget_id : 'at->idget_idd returns the identifier of the domain dvalself : unit->idself() is the identifier of the currently running domain
valbefore_first_spawn : (unit->unit)->unitbefore_first_spawnf registers f to be called before the first domain is spawned by the program. The
functions registered with before_first_spawn are called on the main (initial) domain. The functions
registered with before_first_spawn are called in 'first in, first out' order: the oldest function added
with before_first_spawn is called first.
RaisesInvalid_argument if the program has already spawned a domain.
valat_exit : (unit->unit)->unitat_exitf registers f to be called when the current domain exits. Note that at_exit callbacks are
domain-local and only apply to the calling domain. The registered functions are called in 'last in, first
out' order: the function most recently added with at_exit is called first. An example:
lettemp_file_key=Domain.DLS.new_key(fun_->lettmp=snd(Filename.open_temp_file"""")inDomain.at_exit(fun()->close_out_noerrtmp);tmp)
The snippet above creates a key that when retrieved for the first time will open a temporary file and
register an at_exit callback to close it, thus guaranteeing the descriptor is not leaked in case the
current domain exits.
valcpu_relax : unit->unit
If busy-waiting, calling cpu_relax () between iterations will improve performance on some CPU
architectures
valis_main_domain : unit->boolis_main_domain() returns true if called from the initial domain.
valrecommended_domain_count : unit->int
The recommended maximum number of domains which should be running simultaneously (including domains
already running).
The value returned is at least 1 .
valself_index : unit->int
The index of the current domain. It is an integer unique among currently-running domains, in the interval
0;N-1 where N is the peak number of domains running simultaneously so far.
The index of a terminated domain may be reused for a new domain. Use (Domain.self():>int) instead for
an identifier unique among all domains ever created by the program.
Since 5.3
moduleDLS:sigend
OCamldoc 2025-06-12 Domain(3o)