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

軽量プロセス

スレッドライブラリは、カーネルによってサポートされる軽量プロセス (LWP) と呼ばれる制御スレッドを基礎としています。LWP は、コードやシステムコールを実行する仮想的な CPU と考えることができます。

通常、スレッドを使用するプログラミングで LWP を意識する必要はありません。以下に述べる LWP の説明は、「プロセススコープ (非結合スレッド)」で述べるスケジューリングスコープの違いを理解する際の参考にしてください。


注 -

Solaris 2、Solaris 7、および Solaris 8 オペレーティング環境の LWP と SunOSTM 4.0 LWP ライブラリの LWP は同じものではありません。後者は Solaris 2、Solaris 7、および Solaris 8 オペレーティング環境ではサポートされていません。


fopen()fread() などの stdio ライブラリルーチンが open()read() などのシステムコールを使用するのと同じように、スレッドインタフェースも LWP インタフェースを使用します。

軽量プロセス (LWP) はユーザレベルとカーネルレベルの橋渡しをします。各プロセスは 1 つ以上の LWP を含み、それぞれの LWP は 1 つ以上のユーザスレッドを実行します ( 図 1-1 を参照)。スレッドが生成されるときは、通常それに伴ってユーザのコンテキストが作成されますが、LWP は生成されません。

図 1-1 ユーザレベルスレッドと軽量プロセス

Graphic

各 LWP はカーネルプールの中のカーネルリソースであり、スレッドに割り当てられ (接続され) たり、割り当てを解除され (切り離され) たりします。この割り当て / 割り当て解除はスレッド単位ごとに、スレッドがスケジュールされるか、生成または破棄されたときに行われます。