Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1_Svoystva_i_klassifikatsia_protsessov.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
236.54 Кб
Скачать

22. Механизмы синхронизации Win32. Мьютексы

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

Мьютекс решает задачу взаимного исключения. Может состоять в двух состояниях (занят или свободен). Занятие мьютекса разрешается только одному процессу. При создании мьютекса проверяется его имя: если такого нет — создается новый объект, если такой уже существует — выдается дескриптор объекта и увеличивается счетчик использования. Имя можно не указывать, если мьютекс используется в подзадаче.

Если мьютекс свободен он в сигнализирующем состоянии. Для захвата используется WaitFor(), для освобождения ReleaseMutex(handle).

23. Механизмы синхронизации 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 из ожидающихся процессов; соб-е автоматически переустаавливается не в сигнализирующее состояние. В ручном режиме независимо от набора ожидюпроцессов событие остается в сигнализирующем состоянии.

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

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

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

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

function CreateSemaphore(

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

initialcount: integer;

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

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

CloseHandle(handle);

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

waitFor(...);

//Открытие

ReleaseSemaphore(

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]