Solaris スレッドは、デフォルトでは、非結合スレッドの実行に使用するシステム実行資源 (LWP) を、有効なスレッドの実際の数に合わせて調整しようとします。Solaris スレッドパッケージは完璧な判定はできなくても、少なくともプロセスが実行を継続できるようにします。
どれだけの数の非結合スレッド (実行するコードまたはシステムコール) を同時に有効すべきか見当がつく場合は、thr_setconcurrency() で指定してください。使用されているスレッドの数を取得するには、thr_getconcurrency() を使用してください。
thr_setconcurrency() は、アプリケーションの中で必要とする並行度の目標値をシステムに指示します。システムは、十分な数のスレッドを有効にして、プロセスが実行を継続できるようにします。
#include <thread.h> int new_level; int ret; ret = thr_setconcurrency(new_level);
プロセス内の非結合スレッドを同時に有効にする必要があるかどうかは、状況によって変化します。スレッドシステムのデフォルト設定では、システム資源を節約することを前提にして、プロセスに必要な数のスレッドを有効にします。また、並行度を小さくしすぎてプロセスがデッドロックに陥るといった事態が生じないように並行度も調整されます。
このようなデフォルトの設定では効果的な並行度が得られない場合、アプリケーション側は thr_setconcurrency() の new_level の指定で、スレッドシステムに並行度の目標値を指示できます。
同時に有効になるスレッドの実際の数は、new_level より大きいことも小さいこともあります。
計算を目的とするスレッドが複数存在するアプリケーションでは、thr_setconcurrency() によって実行資源の並行度を調整しておかないと、実行可能なすべてのスレッドのスケジューリングが適切に行われないことがあります。
thr_create() の THR_NEW_LWP フラグでも並行度に影響を与えることができます。これには、現在の並行度を 1 だけ大きくする効果があります。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、thr_setconcurrency() は失敗し、対応する値を戻します。