hHandle: THandle; // дескриптор мьютекса 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

hHandle: THandle; // дескриптор мьютекса

Поиск

function ReleaseMutex(

hHandle: THandle; // дескриптор мьютекса

): Boolean; 

 

При завершении работы мьютекс удаляется из памяти с помощью известной Вам функции CloseHandle, в которую передается дескриптор мьютекса.

Кроме того, следует защищать захват-освобождение средства синхронизации при помощи блока try ... finally, иначе ошибка во время работы с ресурсом приведет к блокированию работы всех процессов, ожидающих его освобождения.

Семафоры

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

Семафор создается функцией

function CreateSemaphore (

Attr: Pointer;     // указатель на атрибуты безопасности

InitialCount: longint; // Начальное число потоков,                         // допущенных к объекту

MaxCount: longint; // Максимальное число допускаемых                         // потоков

lpName: PChar      // имя семафора

 ): THandle;         // дескриптор семафора

Семафор сигнализирует, если InitialCount больше нуля, и не подает сигнала, если InitialCount  равен нулю.

Для доступа к объекту используется функция ожидания
WaitForSingleObject или WaitForMultipleObjects.

При завершении функции ожидания значение счетчика InitialCount соответственно уменьшается, и поток получает доступ к ресурсу.

При завершении доступа к ресурсу необходимо вызвать функцию, увеличивающую значение счетчика семафора:



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 53; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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