Операционные системы. Программирование в операционной среде Windows

33 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES psa BOOL bInitialOwner, LPCWSTR pszName); //создание 0Я «мьютекс» HANDLE CreateEvent( //создание 0Я «событие» LPSECURITY_ATTRIBUTES psa BOOL bManualReset, BOOL binitialState, LPCWSTR pszName); HANDLE CreateSemaphore( //создание 0Я «семафор» LPSECURITY_ATTRIBUTES psa, LONG UnitialCount, LONG IMaximumCount, LPCWSTR pszName); В первом параметре psa задается указатель на атрибуты защиты ОЯ. Если задаются атрибуты защиты по умолчанию, то значение параметра равно NULL. Последний параметр всех функций pszName одинаков, в нем можно передать адрес строки с именем ОЯ, а при передаче в нем значения NULL, создается безымянный ОЯ. Совпадение имен не допускается, так как в системе единое пространство имен. Описание остальных параметров перечисленных функций приведено в п. 3.5.2-3.5.4. Имя созданного объекта можно передать процессам-потомкам через командную строку, или как переменную окружения. Пример фрагмента кода для разделения именованного объекта между процессами. Процесс А вызывает функцию создания ОЯ «мьютекс»: HANDLE hMutexProcessA = CreateMutex(NULL, FALSE, "MyMutex"); Система создает ОЯ мъютекс и присваивает ему имя MyMutex. Процесс В также вызывает функцию создания ОЯ мьютекс: HANDLE hMutexProcessB = CreateMutex(NULL, FALSE, "MyMutex"); Система проверяет, не существует ли ОЯ с таким же именем. Если ОЯ с таким именем уже существует и тип этого объекта совпадает с типом создаваемого объекта, то процесс В получает свой процессно-зависимый описатель существующего ОЯ «мьютекс». Счетчик объекта увеличивается на 1, и теперь этот объект не разрушится, пока его описатели не закроют оба процесса — А и В. Если же ОЯ существует, но тип создаваемого объекта не совпадает с типом существующего объекта, то вызов функции завершается неудачно и возвращается значение NULL. Для разделения объектов по именам вместо вызова Create-функции процесс может обратиться к соответствующей Ореп-функции: OpenMutex, OpenEvent, OpenSemaphore. Главное отличие между вызовом Create- и Ореп- функций в том, что при отсутствии указанного объекта Create-функция создает его, а Ореп-функция уведомляет об ошибке.

RkJQdWJsaXNoZXIy MTY0OTYy