EN JA
PTHREAD_SETCONCURRENCY(3)
PTHREAD_SETCONCURRENCY(3) Linux Programmer's Manual PTHREAD_SETCONCURRENCY(3)

名前

pthread_setconcurrency, pthread_getconcurrency -並列処理レベルの設定/取得を行う

書式


#include <pthread.h>


int pthread_setconcurrency(int new_level);
int pthread_getconcurrency(void);

 


-pthread でコンパイルしてリンクする。

説明

pthread_setconcurrency() 関数は、アプリケーションが希望する並列処理レベル (concurrency level) をスレッド実装に通知する。希望する並列処理レベルは new_level で指定する。スレッド実装はこの情報をヒントとしてのみ利用する。 POSIX.1 では、 pthread_setconcurrency() の呼び出した結果、どのような並列度になるべきかは規定されていない。
 
new_level に 0 を指定すると、スレッド実装は並列処理レベルを実装側で適切とみなしたレベルに設定するようになる。
 
pthread_getconcurrency() は、このプロセスの concurrency level の現在値を返す。

返り値

成功すると、 pthread_setconcurrency() は 0 を返す。エラーの場合、 0 以外のエラー番号を返す。
 
pthread_getconcurrency() は常に成功し、最後の pthread_getconcurrency() の呼び出しで設定された concurrency level を返す。 pthread_getconcurrency() がそれまでに一度も呼び出されていない場合は 0 が返る。

エラー

pthread_setconcurrency() は以下のエラーで失敗する場合がある。
EINVAL
new_level が負である。

POSIX.1-2001 には、エラー EAGAIN も記載されている (「 new_level に指定された値を適用すると、システムリソースが超過してしまう」)。

バージョン

これらの関数は glibc バージョン 2.1 以降で利用できる。

準拠

POSIX.1-2001.

注意

デフォルトの concurrency level は 0 である。
 
並列処理レベルが意味を持つのは M:N スレッド実装の場合のみである。 M:N スレッド実装では、ある瞬間において、あるプロセスのユーザレベルスレッドの集合のサブ集合が、そのサブ集合のサイズよりも少ない数のカーネルのスケジューリング実体 (kernel-scheduling entity) に結び付けられる。並列処理レベルを設定すると、そのアプリケーションの効率的な実行に必要なカーネルのスケジューリング実体の数のヒントを、アプリケーションはシステムに伝えることができる。
 
LinuxThreads と NPTL のどちらも 1:1 スレッド実装であり、並列処理レベルを設定しても何の意味もない。言い換えると、 Linux では、これらの関数は、他のシステムとの互換性のためだけに存在し、プログラムの実行には何の影響も与えないということである。

関連項目

pthread_attr_setscope(3), pthreads(7)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2009-04-10 Linux