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
终结器和捕获所有异常的处理程序将被执行。
为了明确引发异常并将触发终结器和捕获所有异常的处理程序,建议编写 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
重新调度调用线程,而无需挂起它。此函数可用于提供调度提示,告诉调度程序现在是切换到其他线程的最佳时机。
以下函数是早期基于 VM 的线程系统中遗留下来的。 Unix
模块以更通用和更符合标准的方式提供了等效的功能。建议直接使用 Unix
函数。
val wait_timed_read : Unix.file_descr -> float -> bool
val wait_timed_write : Unix.file_descr -> float -> bool
将调用线程的执行挂起,直到至少有一个字符或 EOF 可供读取(wait_timed_read
)或可以在给定的 Unix 文件描述符上写入一个字符而不阻塞(wait_timed_write
)。最多等待第二个参数给出的时间量(以秒为单位)。如果文件描述符已准备好进行输入/输出,则返回 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
指定的进程终止。返回捕获的子进程的 pid 及其终止状态,与 Unix.wait
相同。
信号处理遵循 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
。