VxWorks の反転セーフ ミューテックスを使用するときに SEM_PRIORITY_Q する必要があるのはなぜですか?
質問
VxWorks では、優先順位逆転の問題から保護するために、SEM_INVERSION_SAFE オプションを使用してミューテックスを作成しています。
マニュアルには、私が しなければならない SEM_PRIORITY_Q オプションも使用します。何故ですか?
解決
VxWroks でミューテックス セマフォを作成する場合、セマフォのキューに入れられた (待機している) 複数のタスクを処理する 2 つのオプションがあります。FIFO または最も優先度の高いタスクが最初になります。
SEM_INVERSION_SAFE オプションを使用すると、ミューテックスを保持するタスクは、セマフォを待機している最も優先度の高いタスクと同じ優先度に引き上げられます。
セマフォに FIFO キューを使用する場合、カーネルはミューテックスが最も優先度の高いタスクを見つけるのを待っているタスクのキューを横断する必要があります。キューに入れられたタスクの数が変化すると、キューを通過する時間も変化するため、この操作は決定的ではありません。
SEM_PRIORITY_Q オプションを使用する場合、カーネルはキューの先頭にあるタスクを参照するだけで済みます。これは、タスクが最も優先度が高いためです。これは一定時間の操作です。
所属していません StackOverflow