プログラミング言語SML#解説 4.0.0版
29 SML#実行時データ管理

29.4 マルチスレッドの影響

SML#では, スレッドを生成する任意のC関数をSML#プログラムにインポートする ことができる. C関数によって新たに生成されたスレッドから SML#のコールバック関数によって呼び出されたとしても, SML#ランタイムは新たなスレッドの生成を検知し, SML#プログラムを複数のスレッドで実行する. このとき, 複数のスレッドによるSML#プログラムの実行は, Cプログラムと同様, オペレーティングシステムのマルチスレッドサポートにより, 異なるスレッドで並行に実行される. もしオペレーティングシステムがマルチコアCPU上での 複数スレッドの同時実行をサポートしているならば, SML#プログラムのスレッドも同時に実行される.

複数のSML#プログラムのスレッドは, 単一のヒープ領域を共有する. 従って,SML#の配列などの書き換え可能なデータ構造を利用する ことで,ヒープを介したスレッド間通信を行うことができる. スレッド間で共有されるメモリ領域の排他制御は, 排他制御を行うC関数をインポートし呼び出すことで行う. SML#はヒープに確保したデータの移動を行わないため, SML#のヒープ上に,セマフォなどの排他制御のためのデータ構造を 確保することができる.

以上が,SML#が提供する最も基本的なマルチスレッドサポートである. SML#は標準では高水準なスレッドライブラリを提供しないが, ユーザーはこのマルチスレッドサポートを利用し,より高水準な並行プログ ラミングサポートを提供するライブラリをSML#で書くことができる. SML#に適した,より高水準な並列プログラミングフレームワークは, 将来の版のSML#で提供する予定である.