Механизмы синхронизации Win32. События

Объект типа "событие" — простейший выбор для задач синхронизации. Он подобен дверному звонку — звенит до тех пор, пока его кнопка находится в нажатом состоянии, извещая об этом факте окружающих. Аналогично, и объект может находиться в двух состояниях, а "слышать" его могут многие потоки сразу. Событие может находиться в двух состояниях - активном (сигнализирущее состояние) и сброшенном (несигнализирующее состояние). В активное состояние событие переводится методом SetEvent, а сбрасывается методом ResetEvent. Событие может быть внутренним объектом потока, а может не принадлежать никакому потоку конкретно. Поток может ожидать только данного события с помощью метода Wait, либо использовать его дескриптор Handle для альтернативного ожидания.

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

//P или W в ручном или автономном режиме произошла работа.

function CreateEvent(sa:Pointer; ManResetType:boolean; initSingn:boolean; EventName:pChar):Thandle; CloseHandle(handle); закрыть событие

Setevent(handle); установить событие.

ResetEvent(handle); сбросить событие

PulseEvent(handle);

WaitFor...(...);

Если работа с событиями происходит в автоматическом режиме после установки событий освобождается 1 из ожидающихся процессов; соб-е автоматически переустаавливается не в сигнализирующее состояние. В ручном режиме независимо от набора ожидюпроцессов событие остается в сигнализирующем состоянии.

При автоматическо перустановке возможна работа в пульсирующем режиме, в этом случае операция пульс: освобождается все ожидающие роцессы и событие переустанавливается...

Механизмы синхронизации Win32. Семафоры

Теже семафоры, только вместо счетчика — указатель на ячейку памяти, где он хранится.

//Создание семафоров

function CreateSemaphore(

sa: Pointer; // Начальнео значение семафора

initialcount: integer;

maximumCount: integer; //максимальное значение

SemaphoreName: pChar): Thandle;//Имя семафора

CloseHandle(handle);

Семафор если он открыт находится в синхрониз. Состоянии

waitFor(...);

//Открытие

ReleaseSemaphore(

handle, //дескриптор

count. // знач. На которое изменяется счетчик семафора

poldcount); //Указатель на ячейку которая будет помещен предыдущее значение S


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: