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

thr_setconcurrency(3T)

thr_setconcurrency(3T) は、アプリケーションの中で必要とする並行度の目標値をシステムに指示します。システムは、十分な数のスレッドを有効にして、プロセスが実行を継続できるようにします。


#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() は失敗し、対応する値を返します。


EAGAIN

指定の並行度ではシステムリソースの制限を超えます。


EINVAL

new_level の値が負です。