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.65 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。