マルチスレッドプログラムは、その実装方法がライブラリ呼び出しによるものか、OpenMP によるものか、またはその他の並列コンパイラ命令によるものかに関係なく、スレッドライブラリの libthread.so を呼び出します。 Solaris[tm] 8 オペレーティング環境では、スレッドライブラリ libthread.so の 2 種類の派生関数があります。 デフォルトのスレッドライブラリは必然的に Solaris 7 オペレーティング環境でのライブラリと同じものとなります。 代替スレッドライブラリは /usr/lib/lwp にありますが、その動作は Solaris 9 オペレーティング環境のスレッドライブラリと同じです。
Solaris 8 オペレーティング環境での 2 種類のスレッドライブラリは、異なる動作をします。 デフォルトのスレッドライブラリは、シグナル処理とその他の処理を実行するために追加のスレッドを作成します。 結合スレッドの使用時には、追加スレッド用の軽量プロセス (LWP: Lightweight Process) が作成されます。 これらのスレッドはほとんどの時間スリープ状態にあるため、これらのスレッドに関するパフォーマンスデータは収集されません。 ただし、これらのスレッドに消費される時間は、プロセス統計と標本データに記録される時間の中に含められます。 さらに、ユーザーロック時間として表されるはずのクロックデータは、パフォーマンスアナライザでは「他の待ち時間」として表示されます。 代替スレッドライブラリはこのような余分なスレッドを作成しないで、常に LWP にスレッドを結合し、ユーザーロック時間のクロックデータを正しく蓄積します。 代替スレッドライブラリの使用は通常、プログラムのパフォーマンスの向上につながり、より良いパフォーマンスデータを得られます。 代替スレッドライブラリは、プログラムのリンク時に明示的に選択できます。また、LD_LIBRARY_PATH 環境変数に使用したいライブラリのパスを追加することで、プログラムの実行時に指定したライブラリを使用することができます。
OpenMP プログラムの場合、コンパイラはマイクロタスクライブラリ libmtsk.a への呼び出しを挿入し、このライブラリによってプログラムの並列実行が実現されます。 libmtsk.a は、プログラムの並列実行を実装するライブラリで、スレッドの生成を管理します。 生成されるスレッドは、デフォルトでは結合スレッドです。処理スレッドは、処理を待っている間待ちビジー状態となり、この時間はパフォーマンスアナライザではユーザー CPU 時間として表示されます。 環境変数 SUNW_MP_THR_IDLE を使えば、待ちスリープ状態に設定することもでき、この場合の時間はパフォーマンスアナライザの「他の待ち時間」として表示されます。 詳細については Forte Developer 7 の『OpenMP API ユーザーズガイド』を参照してください。