module DLS:sig
..end
領域本地儲存 (Domain-local Storage)
type 'a
key
DLS 鍵的類型
val new_key : ?split_from_parent:('a -> 'a) -> (unit -> 'a) -> 'a key
new_key f
回傳一個新的鍵,該鍵綁定到初始化函式 f
,用於存取領域本地變數。
如果沒有提供 split_from_parent
,則新領域的值將由新領域按需計算:第一次呼叫 get
將呼叫初始化函式 f
並儲存該值。
如果提供了 split_from_parent
,則產生領域會從父領域的值派生出子領域的值(針對此鍵)。此計算發生在父領域中,並且總是發生,無論子領域是否會使用它。如果分割函式很耗時或需要子端計算,請考慮使用 'a Lazy.t key
let init () = ...
let split_from_parent parent_value =
... parent-side computation ...;
lazy (
... child-side computation ...
)
let key = Domain.DLS.new_key ~split_from_parent init
let get () = Lazy.force (Domain.DLS.get key)
在這種情況下,部分計算發生在子領域中;特別是,它可以與父領域並行存取 parent_value
,這可能需要明確的同步以避免資料競爭。
val get : 'a key -> 'a
get k
回傳 v
,如果值 v
與呼叫領域的領域本地狀態上的鍵 k
關聯。否則,將 k
的值設為其初始化函式並回傳它。
val set : 'a key -> 'a -> unit
set k v
更新呼叫領域的領域本地狀態,將鍵 k
與值 v
關聯。它會覆蓋任何先前與 k
關聯的值,這些值無法稍後還原。