Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

LPTSTR lpszMutexName);



 

Параметр lpsa указывает на структуру SECURITY_ATRIBUTES. Параметр fInitialOwner определяет: должен ли поток, создающий mutex, быть первоначальным владельцем этого объекта. Если он равен TRUE, данный поток становится его владельцем, и, следовательно, объект mutex оказывается в занятом состоянии. Любой другой поток, ожидающий этот объект, будет приостановлен, пока первый поток не освободит его. Передача FALSE в параметре fInitialOwner подразумевает, что объект mutex не принадлежит ни одному из потоков и поэтому "рождается" свободным". Первый же поток из числа ожидающих этот объект может занять его и тем самым продолжить свое исполнение.

Параметр lpszMutexName содержит либо NULL, либо адрес строки (с нулевым символом в конце), идентифицирующий объект mutex. Когда приложение вызывает CreateMutex, система создает объект ядра " mutex " и присваивает ему имя, на которое указывает параметр lpszMutexName. Это имя используется при совместном доступе к нему нескольких процессов. CreatMutex возвращает описатель (его значение зависит от конкретного процесса), идентифицирующий новый объект mutex.

Одно из главных отличий объектов mutex от критических разделов в том, что первые способны синхронизировать потоки, выполняемые в разных процессах. С этой целью поток в каждом процессе должен располагать своим, специфичным для данного процесса описателем единственного объекта mutex. Эти описатели можно получить несколькими путями. Наиболее распространенный способ: один из потоков каждого процесса вы-зывает Creat-Mutex и передает ей в параметре lpszMutexName одну и ту же строку. Первый вызов функции приводит к созданию ядра " mutex ", а остальные ее вызовы просто возвращают соответствующим потокам описатели этого объекта, значения которых специфичны для каждого процесса.

Определить, действительно ли CreatMutex создала новый объект mutex, можно через функцию GetLastError (но обращаться к ней нужно сразу после вызова CreatMutex). Если GetLastError возвратит ERROR_ALREADY_EXISTS, значит, новый объект mutex создан не был.

Еще один способ получить описатель mutex - вызвать OpenMutex:

 


Дата добавления: 2015-07-11; просмотров: 59 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.005 сек.)