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

代替の 1 レベル libthread ライブラリのリンク

標準の Solaris スレッドの実装は、おそらくより少ない軽量プロセス(LWP)にユーザレベルのスレッドが多重化された、2 レベルスレッディングモデル上に構築されます。LWP は、オペレーティングシステムによってプロセッサに振り分けられる、基本実行ユニットです。このメカニズムは、アプリケーションを 1 レベルのセマンティクスで書くためにスレッドを 1 対 1 で LWP に関連付ける(THR_BOUND および PTHREAD_SCOPE_SYSTEM フラグ)標準実装で提供されます。

Solaris 8 オペレーティング環境では、ユーザレベルスレッドが 1 対 1 で LWP に関連付けられる 1 レベルモデルの代替スレッド実装を提供します。この実装は、標準実装よりもシンプルで、いくつかのマルチスレッド化アプリケーションにとっては便利です。これは、POSIX スレッドおよび Solaris スレッドの両方に、標準実装と全く同じインタフェースを提供します。

代替の実装にリンクするには、プログラムへのリンクの際に次の実行パス -R オプションを使用します。

POSIX スレッドの場合は、以下を使用します。


cc -mt ... -lpthread ... -R /usr/lib/lwp          (32-bit)
cc -mt ... -lpthread ... -R /usr/lib/lwp/64       (64-bit)

Solaris スレッドの場合は、以下を使用します。


cc -mt ... -R /usr/lib/lwp             (32-bit)
cc -mt ... -R /usr/lib/lwp/64          (64-bit)

以前に標準スレッドライブラリにリンクされたマルチスレッド化プログラムについては、環境変数 LD_LIBRARY_PATH および LD_LIBRARY_PATH_64 を以下のように設定して、実行時プログラムを代替スレッドライブラリに結合することができます。


LD_LIBRARY_PATH=/usr/lib/lwp
LD_LIBRARY_PATH=/usr/lib/lwp:/usr/lib/lwp/64

環境変数 LD_LIBRARY_PATH が安全なプロセスに対して有効な場合は、この変数によって指定される信頼できるディレクトリのみが実行時リンカーの検索規則の増補に使用されることに注意してください。

代替の 1 レベルスレッド実装を使用する場合は、そのライブラリは非結合スレッドを使用して標準実装よりも多くの LWP を作成することがあります。LWP がオペレーティングシステムメモリーを消費するのに対し、スレッドはユーザレベルメモリーのみ消費します。このように、数千のスレッドを作成するこのライブラリにリンクされたマルチスレッド化アプリケーションは、同数の LWP を作成し、そのアプリケーションをサポートするために必要なリソースからシステムを実行することになります。