Stdlib.DomainSourceA domain of type 'a t runs independently, eventually producing a result of type 'a, or an exception
spawn f creates a new domain that runs in parallel with the current domain.
join d blocks until domain d runs to completion. If d results in a value, then that is returned by join d. If d raises an uncaught exception, then that is re-raised by join d.
Domains have unique integer identifiers
before_first_spawn f 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.
at_each_spawn f registers f to be called on the newly spawned domains. The function f is executed before the callback g specified in spawn g is executed. The registered functions are called in 'first in, first out' order: the oldest function added with at_each_spawn is called first.
at_exit f 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.
The at_exit function can be used in combination with at_each_spawn to clean up domain-local resources. Consider the following example:
let temp_file_key = Domain.DLS.new_key (fun _ ->
snd (Filename.open_temp_file "" ""))
let _ = Domain.(at_each_spawn (fun _ ->
at_exit (fun _ -> close_out (DLS.get temp_file_key))))The snippet above uses domain-local state (Domain.DLS) to create a temporary file for each domain. The at_each_spawn callback installs an at_exit callback on each domain which closes the temporary file when the domain terminates.
If busy-waiting, calling cpu_relax () between iterations will improve performance on some CPU architectures
is_main_domain () returns true if called from the initial domain.
The recommended maximum number of domains to be spawned.