module Domain:sig
..end
域 (Domains)。
請參閱手冊中的「平行程式設計」章節。
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