Pourquoi ai-je besoin de SEM_PRIORITY_Q lorsque j'utilise un mutex VxWorks inversion safe?

StackOverflow https://stackoverflow.com/questions/106540

  •  01-07-2019
  •  | 
  •  

Question

Dans VxWorks, je crée un mutex avec l'option SEM_INVERSION_SAFE, afin de le protéger contre le problème d'inversion de priorité.
Le manuel indique que je dois utiliser également l’option SEM_PRIORITY_Q. Pourquoi est-ce?

Était-ce utile?

La solution

Lorsque vous créez un sémaphore mutex dans VxWroks, vous avez deux options pour traiter plusieurs tâches en file d'attente (en attente) pour le sémaphore: tâche FIFO ou priorité la plus élevée en premier.

Lorsque vous utilisez l'option SEM_INVERSION_SAFE, la tâche contenant le mutex est déplacée avec la même priorité que la tâche à la priorité la plus élevée en attente du sémaphore.

Si vous deviez utiliser une file d'attente FIFO pour le sémaphore, le noyau devrait traverser la file d'attente des tâches en attente du mutex pour trouver celle avec la priorité la plus élevée. Cette opération n'est pas déterministe, car le temps nécessaire pour parcourir la file d'attente change à mesure que le nombre de tâches en file d'attente change.

Lorsque vous utilisez une option SEM_PRIORITY_Q, le noyau doit simplement examiner la tâche située en tête de la file d'attente, car il s'agit de la priorité la plus élevée. Ceci est une opération à temps constant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top