flag: Boolean; // флаг создания 


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



ЗНАЕТЕ ЛИ ВЫ?

flag: Boolean; // флаг создания

Поиск

flag: Boolean; // флаг создания

lpName: PChar // имя мьютекса (обычно Nil, если мьютекс                 // используется только внутри одного процесса)

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

 

Флаг создания указывает (True), будет ли процесс владеть мьютексом сразу после его создания. Функция возвращает дескриптор созданного объекта, либо 0. Если мьютекс с заданным именем уже был создан, возвращается его дескриптор.

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

hMutex := CreateMutex (NIL, FALSE, ‘MutexName’); if hMutex = 0 then RaiseLastWin32Error; if GetLastError = ERROR_ALREADY_EXISTS then begin // Используем ранее созданный объект end;

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

function WaitForSingleObject(

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

dwMilliseconds: DWord // время ожидания в мс 

): DWord;   

Параметр dwMilliseconds может принимать значение Infinite, что означает бесконечный интервал ожидания.

Функция завершает работу, если мьютекс становится сигнальным или истекло время ожидания. После этого поток, находящийся в состоянии ожидания мьютекса, получает к нему доступ, а мьютекс, получивший нового владельца, перестает сигнализировать. Мьютекс можно сравнить с «эстафетной палочкой», которую бегун (поток) молча держит, проходя дистанцию, и кричит «Держи!» (сигнализирует), завершив дистанцию. Вместо WaitForSingleObject может также применяться функция WaitForMultipleObjects [3], которая завершает работу, если несколько мьютексов перешли в сигнальное состояние.

После того, как поток выполнил участок кода, содержащий совместно используемый ресурс, необходимо освободить мьютекс от потока-владельца с помощью функции API



Поделиться:


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

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