Compartilhar via


Inversão de prioridade

Um fenômeno conhecido como inversão de prioridade ocorre quando um thread de alta prioridade é atrasado indefinidamente enquanto aguarda um recurso mantido por um thread de baixa prioridade que não pode prosseguir devido à presença de um thread de prioridade média não relacionado. Como resultado, o thread de alta prioridade é efetivamente negado acesso à CPU pelo thread de prioridade média mais baixa.

Por exemplo, um thread T1 em execução na prioridade 4 é antecipado por um thread T2 de prioridade mais alta com uma prioridade de 8 após a aquisição de um bloqueio. Posteriormente, um fio T3 com prioridade de 12 chega, antecipa T2 e é bloqueado tentando adquirir o bloqueio mantido por T1. Neste ponto, T1 e T2 estão prontos para serem executados, mas como o T2 tem uma prioridade mais alta, ele continua a ser executado, impedindo efetivamente que o T3, um thread de prioridade mais alta, faça progresso porque o T1 não consegue executar e liberar o bloqueio.

O agendador de threads resolve esse problema por meio de um recurso chamado AutoBoost. O AutoBoost rastreia automaticamente as reservas de recursos e ajusta as prioridades do thread aplicando pisos de prioridade que um thread nunca deve cair. Por exemplo, se um thread de baixa prioridade adquirir uma seção crítica e um thread de prioridade mais alta for bloqueado aguardando a seção crítica, a prioridade do proprietário será elevada para a prioridade máxima do garçom até que ele libere o recurso.