Операционные системы. Кручинин А.Ю. - 52 стр.

UptoLike

Составители: 

52
параметром lpName. Имя мьютекса не должно совпадать с именем уже
существующего события, семафора и других объектов межпроцессной
синхронизации. Функция GetLastError при вызове будет выдавать
ERROR_ALREADY_EXISTS.
Для открытия существующего мьютекса используется функция OpenMutex,
освобождения – ReleaseMutex.
Семафор создаѐтся функцией:
Функция CreateSemaphore
HANDLE CreateSemaphore
(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // атрибут доступа
LONG lInitialCount, // инициализированное начальное
// состояние счетчика
LONG lMaximumCount, // максимальное количество
// обращений
LPCTSTR lpName // имя объекта
);
При успешном выполнении функция вернет идентификатор семафора, в
противном случае NULL. После того как необходимость в работе с объектом отпала
нужно вызвать функцию ReleaseSemaphore, чтобы освободить счетчик. Для
открытия существующего семафора используется функция OpenSemaphore.
Объекты синхронизации используются совместно с функциями ожидания. Эти
функции связываются с одним или несколькими синхронизирующими объектами и
ждут, когда эти объекты перейдут в сигнальное состояние. В результате выполнение
процесса приостанавливается до тех пор, пока в системе не произойдѐт некоторое
событие. Ожидание одного события организуется функцией:
Функция WaitForSingleObject
DWORD WaitForSingleObject
(
HANDLE hHandle,
DWORD dwMilliseconds
);
Здесь первый параметр – дескриптор объекта синхронизации, а второй время
ожидания в миллисекундах. Для ожидания нескольких синхронизирующих объектов
используется функция WaitForMultipleObjects.
В листинге 18 приведен пример программы использования мьютекса. При
запуске программы она создает объект с именем «MMM», если захватить его
удается WaitForSingleObject, то программа выполняется якобы, ждет пока введете
число и нажмете Enter. Если захватить его не удается, то выходит с надписью fail.
Если Вы попробуете, то Вы сможете запустить только одну копию.
параметром lpName. Имя мьютекса не должно совпадать с именем уже
существующего события, семафора и других объектов межпроцессной
синхронизации.   Функция     GetLastError при   вызове   будет  выдавать
ERROR_ALREADY_EXISTS.
     Для открытия существующего мьютекса используется функция OpenMutex,
освобождения – ReleaseMutex.
     Семафор создаѐтся функцией:

     Функция CreateSemaphore
HANDLE CreateSemaphore
(
    LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,   // атрибут доступа
    LONG lInitialCount,                            // инициализированное начальное
                                                   // состояние счетчика
     LONG lMaximumCount,                           // максимальное количество
                                                   // обращений
     LPCTSTR lpName                                // имя объекта
);

      При успешном выполнении функция вернет идентификатор семафора, в
противном случае NULL. После того как необходимость в работе с объектом отпала
нужно вызвать функцию ReleaseSemaphore, чтобы освободить счетчик. Для
открытия существующего семафора используется функция OpenSemaphore.
      Объекты синхронизации используются совместно с функциями ожидания. Эти
функции связываются с одним или несколькими синхронизирующими объектами и
ждут, когда эти объекты перейдут в сигнальное состояние. В результате выполнение
процесса приостанавливается до тех пор, пока в системе не произойдѐт некоторое
событие. Ожидание одного события организуется функцией:

     Функция WaitForSingleObject
DWORD WaitForSingleObject
(
    HANDLE hHandle,
    DWORD dwMilliseconds
);

     Здесь первый параметр – дескриптор объекта синхронизации, а второй – время
ожидания в миллисекундах. Для ожидания нескольких синхронизирующих объектов
используется функция WaitForMultipleObjects.

     В листинге 18 приведен пример программы использования мьютекса. При
запуске программы она создает объект с именем «MMM», если захватить его
удается WaitForSingleObject, то программа выполняется якобы, ждет пока введете
число и нажмете Enter. Если захватить его не удается, то выходит с надписью fail.
Если Вы попробуете, то Вы сможете запустить только одну копию.

                                                                                     52