ВУЗ:
Составители:
Назначение приоритета потоку. Назначение потоку приоритета происходит в два этапа. Во-первых, каждому процессу
в момент создания присваивается класс приоритета. Узнать класс приоритета можно с помощью функции GetPriorityClass, а
изменить – с помощью функции SetPriorityClass. В таблице 5 приведены имена классов приоритета процессов, уровни при-
оритета и константы, которые используются с этими вышеупомянутыми функциями (как и с функцией CreateProcess).
5. Соответствие констант уровням приоритетов
Имя класса
приоритета
Уровень
приоритета класса
Символьная константа
Idle 4 IDLE_PRIORITY_CLASS=&H40
Normal 8 NORMAL_PRIORITY_CLASS=&H20
High 13 HIGH_ PRIORITY_CLASS=&H80
Realtime 24 REALTIME_ PRIORITY_CLASS=&H100
Большинство процессов должно получать класс уровня приоритета Normal (обычный). Однако некоторым приложени-
ям, таким как приложения мониторинга системы, возможно, более уместно назначать приоритет Idle (ожидания). Назначе-
ния приоритета Realtime (реального времени) обычно следует избегать, потому что в этом случае потоки изначально полу-
чают приоритет более высокий, чем системные потоки, такие как потоки ввода от клавиатуры и мыши, очистки кэша и обра-
ботки нажатия клавиш Ctrl+Alt+Del. Такой приоритет может быть подходящим для краткосрочных, критичных к времени
выполнения процессов, которые относятся к взаимодействию с аппаратурой.
При создании уровень приоритета потока по умолчанию устанавливается равным уровню класса приоритета процесса,
создавшего данный поток. Тем не менее, можно использовать функцию SetThreadPriority, чтобы изменить приоритет потока:
BOOL SetThreadPriority (
НANDLЕ hThread, // Дескриптор потока.
int nPriority // Уровень приоритета потока.
);
Параметр nPriority используется для изменения приоритета потока относительно приоритета процесса, которому при-
надлежит данный поток.
Повышение приоритета потока и квант изменений приоритета. Диапазон приоритета 1...15 известен как диапазон
динамического приоритета, а диапазон 16...31 – как диапазон приоритета реального времени.
В Windows NT приоритет потока, находящийся в динамическом диапазоне, может временно повышаться операционной
системой в различные моменты времени Соответственно, нижний уровень приоритета потока (установленный программи-
стом с помощью API функции) называется уровнем его базового приоритетa API функция Windows NT SetProcessPriority-
Boost может использоваться для разрешения или запрещения временных изменений приоритета. Правда, она не поддержива-
ется в Windows 9х.
Бывают случаи, когда кванты времени, выделяемые потоку, временно увеличиваются.
Стремясь плавно выполнять операции, Windows будет повышать приоритет потока или увеличивать продолжитель-
ность его кванта времени при следующих условиях:
1) если поток принадлежит приоритетному процессу, т.е. процессу, окно которого активно и имеет фокус ввода;
2) если поток первым вошел в состояние ожидания;
3) если поток выходит из состояния ожидания;
4) если поток совсем не получает процессорного времени.
Состояния потоков
Потоки могут находиться в одном из нескольких состояний:
1) Ready (готов) – находящийся в пуле потоков, ожидающих выполнения;
2) Running (выполнение) – выполняющийся на процессоре;
3) Waiting (ожидание), также называется idle или suspended, приостановленный – в состоянии ожидания, которое за-
вершается тем, что поток начинает выполняться (состояние Running) или переходит в состояние Ready;
4) Terminated (завершение) – завершено выполнение всех команд потока. Впоследствии его можно удалить. Если поток
не удален, система может вновь установить его в исходное состояние для последующего использования.
Синхронизация потоков
Выполняющимся потокам часто необходимо каким-то образом взаимодействовать. Например, если несколько потоков
пытаются получить доступ к некоторым глобальным данным, то каждому потоку нужно предохранять данные от изменения
другим потоком. Иногда одному потоку нужно получить информацию о том, когда другой поток завершит выполнение зада-
чи. Такое взаимодействие обязательно между потоками как одного, так и разных процессов.
Синхронизация потоков (thread synchronization) – это обобщенный термин, относящийся к процессу взаимодействия и
взаимосвязи потоков. Синхронизация потоков требует привлечения в качестве посредника самой операционной системы.
Потоки не могут взаимодействовать друг с другом без ее участия.
В Win32 существует несколько методов синхронизации потоков. В зависимости от конкретной ситуаций один метод
более предпочтителен, чем другой. Рассмотрим эти методы.
Критические секции. Один из методов синхронизации потоков состоит в использовании критических секций (critical
sections). Это единственный метод синхронизации потоков, который не требует привлечения ядра Windows. (Критическая
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »