module Thread:sig
..end
適用於 Posix 1003.1c
和 Win32 的輕量級執行緒。
type
t
執行緒句柄的類型。
val create : ('a -> 'b) -> 'a -> t
Thread.create funct arg
建立一個新的控制執行緒,其中函數應用 funct arg
與網域中的其他執行緒並行執行。Thread.create
的應用返回新建立的執行緒的句柄。當應用 funct arg
正常返回,或者通過引發 Thread.Exit
例外,或通過引發任何其他未捕獲的例外而終止時,新的執行緒會終止。在最後一種情況下,未捕獲的例外會印在標準錯誤輸出上,但不會傳播回父執行緒。同樣地,應用 funct arg
的結果會被丟棄,並且無法直接被父執行緒存取。
如果您需要平行執行,請參閱 Domain.spawn
。
val self : unit -> t
返回目前正在執行的執行緒的句柄。
val id : t -> int
返回給定執行緒的識別符。執行緒識別符是一個整數,可唯一識別執行緒。它可以用來建立由執行緒索引的資料結構。
exception Exit
使用者程式碼引發的例外,用於啟動目前執行緒的終止。在由 Thread.create
funct
arg
建立的執行緒中,如果 Thread.Exit
例外到達應用 funct arg
的頂端,它會產生靜默終止目前執行緒的效果。在其他情況下,Thread.Exit
例外沒有隱含的處理方式。
val exit : unit -> unit
引發 Thread.Exit
例外。在由 Thread.create
建立的執行緒中,除非執行緒函數自行處理例外,否則這會導致執行緒過早終止。Fun.protect
終結器和 catch-all 例外處理器將會被執行。
為了明確指出例外已被引發,並且將觸發終結器和 catch-all 例外處理器,建議寫成 raise Thread.Exit
而不是 Thread.exit ()
。
Thread.create
建立的執行緒之外呼叫時,有不同的行為。val delay : float -> unit
delay d
會暫停呼叫執行緒的執行 d
秒。在此期間,其他程式執行緒會繼續執行。
val join : t -> unit
join th
會暫停呼叫執行緒的執行,直到執行緒 th
終止。
val yield : unit -> unit
重新排程呼叫執行緒,而不暫停它。此函數可用於提供排程提示,告訴排程器現在是切換到其他執行緒的好時機。
以下函數是早期基於虛擬機器的執行緒系統遺留下來的。Unix
模組以更通用和更符合標準的方式提供了等效的功能。建議直接使用 Unix
函數。
val wait_timed_read : Unix.file_descr -> float -> bool
val wait_timed_write : Unix.file_descr -> float -> bool
暫停呼叫執行緒的執行,直到至少有一個字元或 EOF 可供讀取 (wait_timed_read
),或者可以在不阻塞的情況下寫入一個字元 (wait_timed_write
) 到給定的 Unix 檔案描述符。最多等待以第二個引數給定的時間量(以秒為單位)。如果檔案描述符已準備好進行輸入/輸出,則返回 true
;如果逾時到期,則返回 false
。可以使用 Unix.select
來實現相同的功能。
val select : Unix.file_descr list ->
Unix.file_descr list ->
Unix.file_descr list ->
float -> Unix.file_descr list * Unix.file_descr list * Unix.file_descr list
與 Unix.select
相同的函數。暫停呼叫執行緒的執行,直到可以在給定的 Unix 檔案描述符上進行輸入/輸出。引數和結果的含義與 Unix.select
相同。
val wait_pid : int -> int * Unix.process_status
與 Unix.waitpid
相同的函數。wait_pid p
會暫停呼叫執行緒的執行,直到由程序識別符 p
指定的程序終止。根據 Unix.wait
,返回捕獲的子程序的 pid 及其終止狀態。
訊號處理遵循 POSIX 執行緒模型:由執行緒產生的訊號會傳遞到該執行緒;外部產生的訊號會傳遞到不封鎖它的其中一個執行緒。每個執行緒都擁有一組封鎖的訊號,可以使用 Thread.sigmask
修改。此集合在執行緒建立時繼承。每個執行緒的訊號遮罩僅受 Unix 下的系統執行緒函式庫支援,不受 Win32 支援,也不受 VM 執行緒函式庫支援。
val sigmask : Unix.sigprocmask_command -> int list -> int list
sigmask cmd sigs
會變更呼叫執行緒的封鎖訊號集合。如果 cmd
是 SIG_SETMASK
,則封鎖的訊號會設定為清單 sigs
中的訊號。如果 cmd
是 SIG_BLOCK
,則 sigs
中的訊號會新增到封鎖的訊號集合。如果 cmd
是 SIG_UNBLOCK
,則會從封鎖的訊號集合中移除 sigs
中的訊號。sigmask
返回執行緒先前封鎖的訊號集合。
val wait_signal : int list -> int
wait_signal sigs
會暫停呼叫執行緒的執行,直到程序收到清單 sigs
中指定的其中一個訊號。然後,它返回收到的訊號的號碼。不會調用附加到 sigs
中訊號的訊號處理常式。預期在呼叫 wait_signal
之前,會先封鎖訊號 sigs
。
val default_uncaught_exception_handler : exn -> unit
Thread.default_uncaught_exception_handler
將列印執行緒的 ID、例外和回溯 (如果有的話)。
val set_uncaught_exception_handler : (exn -> unit) -> unit
Thread.set_uncaught_exception_handler fn
將 fn
註冊為未捕獲例外的處理常式。
如果新設定的未捕獲例外處理常式引發例外,將會呼叫 Thread.default_uncaught_exception_handler
。