Chapter 24 The threads library

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2008-09-18 (木) 16:02:12

The Objective Caml system release 3.10

threads ライブラリを使うと Objective Caml で並列プログラミングが可能になります。 同じメモリスペースで協調して実行する複数スレッド (軽量プロセスとも呼ばれます) をコントロールすることができます。 スレッドは共有データ構造の書き換えや、通信チャンネルでデータを送受信することで通信します。

threads ライブラリはシングルプロセッサのタイムシェアリングによって実装されています。 マルチプロセッサマシンのアドバンテージは利用できません。 つまりこのライブラリを使用しても、より速く動作するプログラムを作成することは出来ません。 しかし通信プロセスとして構造化されたプログラムを書くときは、これを利用すると容易になります。

threads ライブラリにはオペレーティングシステムの互換性に応じて2つの実装が使えます:

  • システムスレッド。これは OS の提供するスレッド機能(POSIX 1003.1c threads for Unix, and Win32 threads for Windows)による実装です。

可能なときには、システムスレッドはバイトコードとネイティブコードのプログラム両方をサポートします。

  • VM レベルスレッド。この実装は、OCaml のバーチャルマシン(バイトコードインタプリタ)のレベルでタイムシェアリングとコンテクストスイッチを行います。

これは Unix システムで利用可能ですが、バイトコードのプログラムしかサポートされません。ネイティブコードのプログラムでは使うことはできません。

threads ライブラリを使用するプログラムは以下のようにリンクしてください:

ocamlc -thread other options unix.cma threads.cma other files
ocamlopt -thread other options unix.cmxa threads.cmxa other files

threads ライブラリを使うコンパイルユニットは -thread オプション付きでコンパイルする必要があります(8章を見てください)。

VM レベルスレッドを使うプログラムは ocamlc に -vmthread オプション付きでコンパイルし(8章を見てください)、次のようにリンクする必要があります:

ocamlc -vmthread other options threads.cma other files

threads ライブラリを使うコンパイルユニットは -vmthread オプション付きでコンパイルする必要があります(8章を見てください)。

  • Module Thread: lightweight threads
  • Module Mutex: locks for mutual exclusion
  • Module Condition: condition variables to synchronize between threads
  • Module Event: first-class synchronous communication
  • Module ThreadUnix?: thread-compatible system calls

新規 編集 添付