АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Синхронизация процессов с использованием объектов ядра

Читайте также:
  1. III. Психические свойства личности – типичные для данного человека особенности его психики, особенности реализации его психических процессов.
  2. III. Создание и обработка комплексного информационного объекта в виде презентации с использованием шаблонов.
  3. IV. Требования к зонам рекреации водных объектов
  4. Автоматизация гидродинамических процессов.
  5. Автоматизация логистических процессов предприятия
  6. Автоматизация тепловых процессов
  7. Автосинхронизация
  8. АНАЛИЗ ОБЪЕКТОВ МЕНЕДЖМЕНТА
  9. Анализ окружения объектов недвижимости
  10. Анализ пожарной опасности технологических процессов
  11. Анимация объектов презентации
  12. Аппаратурное оформление процессов биотехнологии

Лекция 5

Синхронизация процессов

Вопросы

Синхронизация процессов с использованием объектов ядра

Задачи синхронизации

Мониторы Хоара

Почтовые ящики

Конвейеры и очереди сообщений

Литература

Системное программное обеспечение /А.В. Гордеев, А.Ю. Молчанов. – СПб.: Питер. 2003. – с. 236…259.

 

Синхронизация процессов с использованием объектов ядра

 

Многие объекты ядра, включая процесс, поток, файл, мыютекс, семафор, уве­домление об изменении файла и событие, могут находиться водном из двух состояний - «свободно» (signaled) и «занято» (nonsignaled). Вероятно, проще представлять себе эти объекты подключенными к лампочке, как на приведенном рисунке. Если свет горит, объект свободен, в обратном случае объект занят.

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

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

Посредством вызова функций WaitForSingleObject и WaitForMultipleObjects поток приостанавливает свое выполнение до того момента, когда заданный объект (или объекты) перейдет в состояние «свободно». Рассмотрим функции WaitForSingleObject, декларация которой выглядит так:

DWORD WaitForSingleObject(

HANDLE hHandle, // Дескриптор объекта ожидания
DWORD dwMilliseconds // Время ожидания в миллисекундах

);

в Delphi:

 

function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; stdcall;

function WaitForSingleObject; external kernel32 name 'WaitForSingleObject';

Параметр hHandle является дескриптором объекта, уведомление о свободном состоянии которого требуется получить, a dwMilliseconds - это время, которое вызывающий поток готов ждать. Если dwMilliseconds равно нулю, функ­ция немедленно вернет текущий статус заданного объекта. Таким образом, можно протестировать состояние объекта. Параметру можно также присваивать значе­ние символьной константы INFINITE (= -1), в этом случае вызывающий поток будет ждать неограниченное время.

Функция WaitForSingleObject переводит вызывающий поток в состояние ожидания до того момента, когда она передаст ему свое возвращаемое значение. Ниже перечислены возможные возвращаемые значения:

· wait_object_0 - объект находится в состоянии «свободно»;

· WAIT_TIMEOUT - интервал ожидания, заданный dwMilliseconds, истек,

а нужный объект по прежнему находится в состоянии «занято»;

· WAIT_ABANDONED относится только к мьютексу и означает, что объект не

был освобожден потоком, который владел им до своего завершения;

· WAIT_FAILED - при выполнении функции произошла ошибка.

 


1 | 2 | 3 | 4 | 5 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)