OCamlではCMLスタイルのスレッド間通信が可能です。 Eventモジュールには基本的なイベント型やその同期関数が揃っています。 ところが、ivarやmvarといった共有変数が無い為に苦しい状況になっています。 例えばとても単純に、整数を渡して計算結果を(今回は倍にして)返してくれるスレッドを作ってみましょう。 すぐに思いつくのは、次のようなコードです。 let start_server () = let in_ch, out_ch = new_channel (), new_channel () in let rec loop () = let x = sync (receive in_ch) in loop (sync (send out_ch (x * 2))) in ignore (Thread.create loop ()); in_ch, out_ch let calc (i