Module Thread


module Thread: sig  end
Posix 1003.1c と Win32 用の軽量プロセスです。


type t
スレッドハンドルの型です。



Thread creation and termination


val create : ('a -> 'b) -> 'a -> t
Thread.create funct arg は新しいスレッドを作成します。このスレッドでは関数適用 funct arg がプログラムの他のスレッドと協調して実行されます。Thread.create を評価すると新しく作られたスレッドのハンドルが返ります。 funct arg の適用が正常に終了するか、キャッチされない例外が発生した場合、このスレッドは終了します。後者の場合、標準エラー出力に例外がプリントされますが、親スレッドには伝播しません。同様に、funct arg の評価結果は捨てられ、親スレッドから直接アクセスすることは出来ません。
val self : unit -> t
現在実行しているスレッドが返ります。
val id : t -> int
与えられたスレッドの ID が返ります。スレッドの ID はスレッドにユニークな整数です。スレッド別にインデックス付けされたデータ構造を作成するときに使用できます。
val exit : unit -> unit
現在実行しているスレッドを途中で終了させます。
val kill : t -> unit
与えられたハンドルのスレッドを途中で終了させます。


Suspending threads


val delay : float -> unit
delay d は、呼び出したスレッドの実行を d 秒間停止させます。この間他のスレッドは動作を続けます。
val join : t -> unit
join th は、呼び出したスレッドの実行を、スレッド th が終了するまで停止させます。
val wait_read : Unix.file_descr -> unit
Thread.wait_write を見て下さい。
val wait_write : Unix.file_descr -> unit
現在の実装ではこの関数は何もしません。
val wait_timed_read : Unix.file_descr -> float -> bool
Thread.wait_timed_read を見て下さい。
val wait_timed_write : Unix.file_descr -> float -> bool
与えられた Unix ファイルディスクリプタからブロッキングなく一文字でも読めるようになるか (wait_read) 、一文字でも書けるようになる (wait_write) まで、呼び出したスレッドの実行を停止させます。第二引数に与えられた秒数待っても条件を満たさない場合は終了します。ファイルディスクリプタの読み書きの準備が出来ている場合は true を、制限時間をオーバーした場合は false を返します。

Win32 での実装では、これらの関数はただちに true を返します。

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 ファイルディスクリプタの読み書きが可能になるまで呼び出したスレッドの実行を停止させます。引数と結果の意味は Unix.select と同じです。この関数は現在 Win32 では未実装です。
val wait_pid : int -> int * Unix.process_status
wait_pid p は、プロセス ID p で示されたプロセスが終了するまで、読み出したスレッドの実行を停止させます。Unix.wait と同じように、子プロセスの pid とその終了状態を返します。この関数は現在 MacOS では未実装です。
val wait_signal : int list -> int
wait_signal sigs は、sigs のリストで示されるシグナルのどれか 1 つを受け取るまで、呼び出したスレッドの実行を停止させます。受け取ったシグナルの番号を返します。sigs 内のシグナルのシグナルハンドラは実行されません。複数のスレッドから同じシグナルを指定して wait_signal を同時に呼び出すことはしないでください。
val yield : unit -> unit
呼び出したスレッドを停止させずに再スケジュールします。この関数はスケジューラに「今は他スレッドを実行させるほうが良い」というスケジュールのヒントを伝えることに使用できます。