pthread_setschedprio サブルーチン
目的
動的スレッド・スケジューリング・パラメーター・アクセス (REALTIME THREADS)。
構文
#include <pthread.h>
int pthread_setschedprio(pthread_t thread, int prio); 説明
pthread_setschedprio()関数は、threadで与えられたスレッドIDを持つスレッドのスケジューリング優先度をprioで与えられた値に設定する。 pthread_setschedprio()によってポリシーまたは優先度が変更されたスレッドが実行中のスレッドまたは実行可能なスレッドである場合、トレッドリストにおけるその位置への影響は、以下のように変更の方向によって異なる:
- 優先順位が高くなると、スレッドはスレッド・リストのテールになります。
- 優先順位が変更されない場合、スレッドはスレッド・リスト内の位置を変更しません。
- 優先順位を下げると、そのスレッドはスレッドリストの先頭になる。
有効な優先度は、sched_get_priority_max()およびsched_get_priority_min()が返す範囲内である。
pthread_setschedprio()関数が失敗した場合、対象スレッドのスケジューリング優先度は変更されない。
理由
pthread_setschedprio()関数は、同じ優先順位の他のスレッドに譲るという望ましくない副作用を伴わずに、アプリケーションが一時的に優先順位を上げ、再び下げる方法を提供する。 これは、アプリケーションが、優先順位の継承や優先順位の上限など、優先順位の逆転のための独自の戦略を実装する場合に必要です。 このケイパビリティは、スレッド優先度保護またはスレッド優先度継承オプションをサポートしていない実装では特に重要である。
標準開発者は、pthread_setschedparam()の仕様を変更することでこの問題を解決するのが概念的には望ましいかもしれないが、変更が必要な実装があるかもしれないので、そのような変更をするには遅すぎると考えた。 そのため、この新機能が導入されました。
戻り値
成功すれば、pthread_setschedprio()関数は0を返し、そうでなければ、エラーを示すエラー番号が返される。
エラー・コード
pthread_setschedprio()関数は、以下の場合に失敗する可能性がある:
| 項目 | 説明 |
|---|---|
| EINVAL | prio の値は、指定されたスレッドのスケジューリング・ポリシーに対して無効です。 |
| ENOTSUP | 優先順位をサポートされない値に設定しようとしました。 |
| EPERM | 呼び出し元には、指定されたスレッドのスケジューリング・ポリシーを設定するための適切な許可がありません。 |
| EPERM | この実装では、アプリケーションは指定された値に優先順位を変更できません。 |
| ESRCH | threadで指定された値は、既存のスレッドを参照していない。 |
pthread_setschedprio関数は [EINTR] のエラーコードを返さない。