マルチスレッドのプログラミング

マルチスレッドに関する用語の定義

表 1–1 では、このマニュアルで使用する用語の一部について解説します。

表 1–1 マルチスレッドに関する用語の定義

用語 

定義 

プロセス 

fork(2) システムコールで生成される UNIX 環境 (ファイル記述子やユーザー ID などのコンテキスト) で、プログラムを実行するために設定されます。

スレッド 

プロセスのコンテキスト内で実行されるひとまとまりの命令。 

POSIX pthreads

POSIX スレッドに準拠したスレッドインタフェース。詳細については、「Solaris のマルチスレッドライブラリと標準」を参照してください。

Solaris スレッド

POSIX スレッドに準拠しない、Sun Microsystems のスレッドインタフェース。pthread の祖先。 

シングルスレッド

1 プロセス 1 スレッドで動作させること。実行は逐次処理で行われ、制御スレッドが 1 つに制限されます。 

マルチスレッド

1 プロセス複数スレッドで動作させること。実行は複数の制御スレッドで行われ、並列または並行処理が使用されます。 

ユーザーレベルまたはアプリケーションレベルのスレッド

(カーネル空間に対応する) ユーザー空間のスレッドルーチンによって管理されるスレッド。ユーザースレッドの作成および処理には、POSIX pthread や Solaris スレッドの API が使用されます。このマニュアルでは (また一般にも)、スレッドとはユーザーレベルのスレッドを指します。 


注 –

このマニュアルはアプリケーションプログラマ向けであるため、カーネルスレッドのプログラミングについては触れません。


軽量プロセス

カーネルコードとシステムコールを実行するカーネルスレッド (LWP)。LWP はシステムスレッドのスケジューラによって管理され、アプリケーションプログラマが直接制御することはできません。Solaris 9 以降、ユーザーレベルのすべてのスレッドに専用の LWP が用意されるようになりました。これは 1:1 スレッドモデルとも呼ばれます。 

結合スレッド (廃止された用語)

Solaris 9 より前の、単一の LWP に永続的に結合されたユーザーレベルのスレッド。Solaris 9 以降は、すべてのスレッドに専用の LWP が用意されるようになったため、すべてのスレッドが結合スレッドです。非結合スレッドの概念は存在しなくなりました。 

非結合スレッド (廃止された用語)

Solaris 9 より前の、単一の LWP に結合されているとは限らないユーザーレベルのスレッド。Solaris 9 以降は、すべてのスレッドに専用の LWP が用意されるようになったため、非結合スレッドの概念は存在しなくなりました。 

属性オブジェクト 

不透明なデータ型と関連操作のための関数が含まれます。これらのデータ型および関数は、POSIX スレッド、相互排他ロック (mutex)、条件変数の調整可能な部分を共通化するために使用されます。 

相互排他ロック

共有データへのアクセスをロック / ロック解除するために使用されるオブジェクト。このようなオブジェクトは mutex とも呼ばれます。 

条件変数 

状態が変化するまでスレッドをブロックするために使用されるオブジェクト。 

読み取り/書き込みロック 

共有データに対して複数の読み取り専用アクセスを許可するが、共有データを変更する場合は排他的アクセスを許可するために使用されるオブジェクト。 

計数型セマフォー

複数のスレッドからの共有リソースへのアクセスを調整するために 0 以上の整数カウントが使用される、メモリーベースの同期機構。 

並列性 

2 つ以上のスレッドが同時に実行されている状態を表す概念。

並行性 

2 つ以上のスレッドが進行過程にある状態を表す概念。仮想的な並列性としてタイムスライスを包含する、一般化された形の並列性。