Compartir a través de


Inversión de prioridades

Un fenómeno conocido como inversión de prioridad se produce cuando un subproceso de alta prioridad se retrasa indefinidamente mientras espera un recurso en manos de un subproceso de baja prioridad que no puede continuar debido a la presencia de un subproceso de prioridad media no relacionado. Como resultado, al subproceso de alta prioridad se le niega el acceso a la CPU por parte del subproceso de baja prioridad media.

Por ejemplo, un subproceso T1 con prioridad 4 es adelantado por un subproceso T2 con prioridad 8 tras adquirir un bloqueo. A continuación, llega un subproceso T3 con prioridad 12, se adelanta a T2 y se bloquea intentando adquirir el bloqueo de T1. En este punto, tanto T1 como T2 están listos para ejecutarse, pero como T2 tiene mayor prioridad, continúa ejecutándose, impidiendo que T3, un hilo de mayor prioridad, avance porque T1 no puede ejecutarse y liberar el bloqueo.

El programador de hilos soluciona este problema mediante una función llamada AutoBoost. AutoBoost realiza un seguimiento automático de las reservas de recursos y ajusta las prioridades de los subprocesos mediante la aplicación de niveles de prioridad por debajo de los cuales nunca debe quedar un subproceso. Por ejemplo, si un hilo de baja prioridad adquiere una sección crítica y un hilo de mayor prioridad está bloqueado esperando la sección crítica, la prioridad del propietario se eleva a la prioridad máxima del camarero hasta que libere el recurso.