Frage

In VxWorks, ich bin einen Mutex mit der SEM_INVERSION_SAFE Option zu schaffen, zum Schutz vor dem Prioritätsumkehrungsproblem.
Das Handbuch sagt, dass I muss auch die SEM_PRIORITY_Q Option verwenden. Warum das?

War es hilfreich?

Lösung

Wenn ein Mutex Semaphore in VxWroks erstellen, haben Sie zwei Möglichkeiten mit mehreren Aufgaben zu bewältigen Warteschlange (Wartezeit) für die Semaphore. FIFO oder Aufgabe mit höchster Priorität zuerst

Wenn Sie die SEM_INVERSION_SAFE Option verwenden, die Aufgabe, die Mutex halten wird als Aufgabe mit höchster Priorität für die Semaphore warten auf die gleiche Priorität wird gestoßen.

Wenn Sie eine FIFO-Warteschlange für die Semaphore zu verwenden, würde der Kernel die Warteschlange von Aufgaben für den Mutex warten zu durchqueren den mit der höchsten Priorität zu finden. Dieser Vorgang ist nicht deterministisch, da die Zeit, um die Warteschlange ändert sich die Anzahl der Tasks in der Liste Änderungen zu durchqueren.

Wenn Sie eine SEM_PRIORITY_Q Option verwenden, muss der Kernel einfach an der Aufgabe an der Spitze der Schlange schauen, wie es die höchste Priorität ist. Dies ist ein konstanter Zeitbetrieb.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top