Инверсия приоритета происходит тогда, когда два или несколько потоков с различными приоритетами находятся в споре,
который из них должен быть обслужен процессором. Рассмотрим простой случай с тремя потоками: поток 1, поток 2 и поток 3.
Поток 1 - высокоприоритетный и становится готовым быть допущенным к процессору для исполнения кода. Поток 2, поток с низким
приоритетом, выполняет код в критической секции программы. Поток 1, высокоприоритетный поток, начинает ожидать
совместно используемый ресурс от потока 2. Поток 3 имеет средний приоритет. Поток 3 получает все процессорное время, потому что
высокоприоритетный поток (поток 1) ожидает совместно используемые ресурсы от потока с низким приоритетом (поток 2). Поток 2 не
оставит критическую секцию программы, потому что не имеет самого высокого приоритета и не будет допущен к процессору
для исполнения кода.
Windows NT/2000/XP:
диспетчер решает эту проблему, при помощи произвольного повышения приоритетов потоков готовых к
работе (в этом случае, низкоприоритетные потоки удерживаются заблокированными). Низкоприоритетные потоки запускаются
достаточно долго, чтобы выйти из критической секции программы, а высокоприоритетный поток может ввести
критическую секцию программы. Если поток с низким приоритетом не получит достаточно процессорного
времени, чтобы выйти из критической секции программы первый раз, он получит другой шанс в течение следующего круга
диспетчеризации.
Windows 95/98/Me:
Если высокоприоритетный поток зависит от потока с низким приоритетом, который не будет иметь
возможности исполнить свой код, потому что средне приоритетный поток получает все процессорное
время, система признает, что высокоприоритетный поток зависит от потока с низким приоритетом. Она повышает
приоритет низкоприоритетного потока до уровня высокоприоритетного потока. Это дает возможность потоку, который прежде
имел самый низкий приоритет исполнить свой код и освободить высокоприоритетный поток, который ожидал его.