Dans VxWorks, je crée un mutex avec l'option SEM_INVERSION_SAFE, pour me protéger du problème d'inversion de priorité.
Le manuel indique que je doit utiliser également l'option SEM_PRIORITY_Q. Pourquoi donc?Pourquoi ai-je besoin de SEM_PRIORITY_Q lorsque j'utilise un mutex VxWorks à inversion de sécurité?
Pourquoi ai-je besoin de SEM_PRIORITY_Q lorsque j'utilise un mutex VxWorks à inversion de sécurité?
Répondre
Lors de la création d'un sémaphore mutex dans VxWroks, vous avez deux options pour gérer plusieurs tâches en file d'attente (en attente) pour le sémaphore: première tâche FIFO ou priorité la plus élevée. Lorsque vous utilisez l'option SEM_INVERSION_SAFE, la tâche contenant le mutex sera convertie en priorité avec la tâche de priorité la plus élevée en attente du sémaphore.
Si vous utilisiez une file d'attente FIFO pour le sémaphore, le noyau devrait traverser la file d'attente des tâches attendant que le mutex trouve celui qui a la plus haute priorité. 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 mises en file d'attente change. Lorsque vous utilisez une option SEM_PRIORITY_Q, le noyau doit simplement regarder la tâche en tête de la file, car c'est la priorité la plus élevée. C'est une opération à temps constant.