名称
pthread_getconcurrency(), pthread_setconcurrency() ― アンバインドされたスレッドの並列性レベルの取得と設定
構文
#include <pthread.h>
int pthread_setconcurrency(
int new_level
);
int pthread_getconcurrency(void);
パラメータ
| new_level | | 呼び出しプロセスでアンバインドされたスレッドの新しい並列性レベル。 |
説明
プロセスでアンバインドされたスレッドには、同時にアクティブになる必要がある場合と、その必要がない場合があります。
デフォルトでは、プロセスを進行し続けるのに十分な数のスレッドがアクティブであると保証されます。
この方法ではシステムリソースは節約されますが、最も効果的なレベルでの並列性が発揮されない可能性があります。 pthread_setconcurrency() 関数を使用することで、
アプリケーションの並列性レベルを new_level にしてスレッドを実行するよう要請できます。 この関数呼び出しの結果としてシステムが提供する実際の並列性レベルは、規定されません。
new_level が 0 の場合、 pthread_setconcurrency() がまったく呼び出されなかったかのように、システムが設定する任意の並列性レベルで実行が持続されます。
pthread_getconcurrency() 関数は、前回の pthread_setconcurrency() 呼び出しで設定された値を返します。 pthread_setconcurrency() 関数が呼び出されていない場合は、システムが並列性レベルを維持していることを示すために 0 を返します。
注意: アプリケーションで pthread_setconcurrency() を呼び出すと、希望する並列性レベルで実行するようシステムに通知されます。
しかし、必ずしも指定した並列性レベルで実行されるわけではなく、ヒントとして使用されるにすぎません。 pthread_setconcurrency() を呼び出したあとで即座に pthread_getconcurrency() を呼び出すと、 pthread_setconcurrency() で指定したものとは異なる並列性レベルが返される可能性があります。
カーネルでスケジューリングされる複数の要素の最上位階層においてユーザースレッドの多重化がサポートされていない場合、ソースコードの互換性のために pthread_getconcurrency() 関数と pthread_setconcurrency() 関数が提供されますが、これらの関数を呼び出しても何の影響もありません。
関数の機能を維持するために、 pthread_setconcurrency() が呼び出されたときの new_level パラメータの値は保存されます。したがって、次に pthread_getconcurrency() を呼び出すと、前に設定した値が返されます。
戻り値
正常終了すると、 pthread_setconcurrency() は 0 を返します。
それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。
pthread_getconcurrency() 関数は常に、前回の pthread_setconcurrency() の呼び出しで指定された並列性レベルを返します。 pthread_setconcurrency() 関数が一度も呼び出されていない場合、 pthread_getconcurrency() は 0 を返します。
エラー
次の場合、 pthread_setconcurrency() 関数は、対応するエラー番号を返します。
| [EINVAL] | | new_level で指定された値が無効の場合。 |
| [EAGAIN] | | new_level で指定された値が、システムリソースを超過する場合。 |
アプリケーション使用法
これらの関数を使用すると、アプリケーションが依存している並列性レベルの状態が変わります。
ライブラリ開発者の方には、 pthread_getconcurrency() と pthread_setconcurrency() 関数を使用しないようお奨めします。
安易に使用すると、アプリケーションで使用しているものと衝突する危険性があります。
著者
pthread_getconcurrency() と pthread_setconcurrency() は、X/Open で開発されました。
標準準拠
pthread_getconcurrency(): X/Open.
pthread_setconcurrency(): X/Open.