Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

2.3.1.5. Диспетчерские объекты

Если объект режима ядра содержит структуру данных, называемую «заголовком диспетчеризации» (рис. 2.5), то такой объект называется диспетчерским. На такие объекты пользователи ссылаются с использованием дескрипторов.

Рис

Рис. 2.5. Структура данных dispatcher_header
в диспетчерских объектах

Диспетчерскими объектами могут быть события, мьютексы, таймеры ожидания, семафоры и другие объекты, осуществляющие синхронизацию потоков. Структура данных заголовка диспетчеризации содержит информацию о сигнальном состоянии объекта, а также данные о потоках, которые ожидают сигнала от объекта.

Механизм диспетчерских объектов используется также таймерами, файлами, портами, потоками и процессами. Например, в момент срабатывания таймера, при появлении в порту данных, при окончании ввода-вывода в файл, завершении выполнения потока или процесса используемый диспетчерский объект сигнализирует всем ожидающим данные события потокам.

Для синхронизации с объектами режима ядра система Windows использует единый механизм. Для организации ожидания потоками сразу нескольких событий Windows использует WaitForMultipleObjects, который позволяет потоку ожидать любой диспетчерский объект, на который у потока имеется описатель. До 64 дескрипторов можно определить для WaitForMultipleObjects. А также можно указать и значение тайм-аута. Переход потока в состояние готовности осуществляется по сигналу от любого связанного с описателем объекта или по тайм-ауту.

Для перевода ядром системы потоков в работоспособное состояние используются две разные процедуры. Все ожидающие потоки переходят в состояние готовности, если происходит получение сигнала от объекта уведомления (notification object). Однако при использовании объектов синхронизации (synchronization objects) работоспособность получает только первый поток, находящийся в состоянии ожидания. Объекты синхронизации используются только реализующими примитивы блокировки диспетчерскими объектами. Только флагом в структуре данных заголовка диспетчеризации устанавливается, что будет использоваться диспетчерскими объектами (синхронизация или уведомление).

Предыдущий раздел Оглавление Следующий раздел