模組 Domain

module Domain: sig .. end

域 (Domains)。

請參閱手冊中的「平行程式設計」章節。

type !'a t 

類型為 'a t 的域會獨立執行,最終產生 'a 類型的值,或拋出例外。

val spawn : (unit -> 'a) -> 'a t

spawn f 會建立一個與目前域平行執行的新域。

val join : 'a t -> 'a

join d 會阻塞直到域 d 執行完成。如果 d 產生一個值,則 join d 會返回該值。如果 d 拋出一個未捕獲的例外,則 join d 會重新拋出該例外。

type id = 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 添加的函數會最先被呼叫。

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