module Domain:sig
..end
域。
参见手册中的“并行编程”章节。
type !'a
t
类型为 'a t
的域独立运行,最终产生类型为 'a 的结果,或异常。
val spawn : (unit -> 'a) -> 'a t
spawn f
创建一个新的域,该域与当前域并行运行。
Failure
,如果程序没有足够的资源来创建另一个域。val join : 'a t -> 'a
join d
阻塞,直到域 d
运行完成。如果 d
产生一个值,则该值由 join d
返回。如果 d
抛出一个未捕获的异常,则该异常由 join d
重新抛出。
typeid = private
int
域具有唯一的整数标识符。
val get_id : 'a t -> id
get_id d
返回域 d
的标识符。
val self : unit -> id
self ()
是当前正在运行的域的标识符。
val before_first_spawn : (unit -> unit) -> unit
before_first_spawn f
注册 f
,以便在程序生成第一个域之前调用。使用 before_first_spawn
注册的函数在主(初始)域上调用。使用 before_first_spawn
注册的函数按“先进先出”顺序调用:使用 before_first_spawn
添加的最旧函数首先调用。
Invalid_argument
,如果程序已经生成了一个域。val at_exit : (unit -> unit) -> unit
at_exit f
注册 f
,以便在当前域退出时调用。请注意,at_exit
回调是域本地的,仅适用于调用域。注册的函数按“后进先出”顺序调用:使用 at_exit
最近添加的函数首先调用。一个例子
let temp_file_key = Domain.DLS.new_key (fun _ ->
let tmp = snd (Filename.open_temp_file "" "") in
Domain.at_exit (fun () -> close_out_noerr tmp);
tmp)
上面的代码片段创建了一个键,当第一次检索该键时,它将打开一个临时文件并注册一个 at_exit
回调以关闭它,从而保证在当前域退出时不会泄漏描述符。
val cpu_relax : unit -> unit
如果忙等待,在迭代之间调用 cpu_relax () 将提高某些 CPU 架构上的性能。
val is_main_domain : unit -> bool
is_main_domain ()
如果从初始域调用,则返回 true。
val recommended_domain_count : unit -> int
建议同时运行(包括已运行的域)的域的最大数量。
返回值至少为 1
。
module DLS:sig
..end