-
chg_pri
ichg_pri
-
ER chg_pri ( ID tskid, PRI tskpri );
ER ichg_pri ( ID tskid, PRI tskpri );
tskidで指定されたタスクのベース優先度を
tskpriで指定された値に変更します。
変更されたタスクのベース優先度は,タスクが終了,または本サービス・コールを呼び出すまで有効です。次回のタスク起動時,タスクのベース優先度はタスク生成時に指定した初期タスク優先度になります。
本サービス・コールは,対象タスクの現在優先度も,
tskpriで示された値に変更します。ただし,対象タスクがミューテックスをロックしている場合は,現在優先度は変更しません。
対象タスクがミューテックスをロックしているかロックを待っている場合で,
tskpriがそれらのミューテックスのいずれかの上限優先度よりも高い場合には,戻り値としてE_ILUSEを返します。
現在優先度が変更された場合,以下の状態変化が生じます。
1 ) 対象タスクがRUNNING状態またはREADY状態の場合
本サービス・コールは,対象タスクを
tskpriで指定された優先度に応じたレディ・キューの最後尾につなぎかえます。
2 ) 対象タスクがTA_TPRI属性またはTA_CEILING属性のオブジェクトの待ちキューにキューイングされている場合
本サービス・コールは,
tskpriで指定された優先度にしたがって対象タスクを待ちキューにつなぎかえます。待ちキューに
tskpriで指定された現在優先度のタスクが複数ある場合は,対象タスクをそれらの中の最後尾につなぎかえます。
例 セマフォの待ちキューに3つのタスク(タスクA:優先度10,タスクB:優先度11,タスクC:優先度12)が優先度順でキューイングされているとき,タスクBの優先度を11から9に変更した場合,待ちキューの順序は,以下のように変更されます。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- CPUロック状態から本サービス・コールを発行した。
- 「PSW.IPL > カーネル割り込みマスクレベル」の状態から本サービス・コールを発行した。
|
|
|
- tskpri<対象タスクがロックしているミューテックスの上限優先度
- tskpri<対象タスクがロックを待っているミューテックスの上限優先度
|
|
|
|