Уровень приоритета, получаемый комбинацией относительного приоритета потока и класса приоритета процесса, которому принадлежит данный поток, называют базовым уровнем приоритета потока. Иногда система изменяет уровень приоритета потока. Обычно это происходит в ответ на некоторые события, связанные с вводом выводом (например, на появление оконных сообщений или чтение с диска).
Система повышает приоритет только тех потоков, базовый уровень которых находится в пределах 1-15 Именно поэтому данный диапазон называется «областью динамического приоритета» (dynamic priority range). Система не допускает динамического повышения приоритета потока до уровней реального времени (более 15) Поскольку потоки с такими уровнями обслуживают системные функции, это ограничение не дает приложению нарушить работу операционной системы.
Для отключения механизма динамического изменения приоритета есть две функции:
BOOL SetProcessPriorityBoost(HANDLE hProcess, BOOL DisablePriontyBoost);
BOOL SetThreadPriorityBoost(HANDLE hThread, BOOL DisablePriorityBoost);
SetProcessPriorityBoost заставляет систему включить или отключить изменение приоритетов всех потоков в указанном процессе, a SetThreadPriorityBoost действует применительно к отдельным потокам. Эти функции имеют свои аналоги, позволяющие определять, разрешено или запрещено изменение приоритетов:
|
|
BOOL GetProcessPriorityBoost(HANDLE hProcess,
PBOOL pDisablePriorityBoost);
BOOL GeLThreadPriorityBoost(HANDLE hThread,
PBOOL pDisablePriorityBoost);
Каждой из этих двух функций передаётся описатель нужного процесса или потока и адрес переменной чипа BOOL, в которой и возвращается результат.
3 4 Задача синхронизации потоков