Архитектура современных операционных систем
122 e=OpenEvent(имя_события) Для работы с событием используются функции: SetEvent(e) – установка события; ClearEvent(e) – сброс события; PulseEvent(e) – устанавливает и тут же сбрасывает CloseEvent(e) – закрывает описатель события. Ожидание установки события производится стандартными функциями: WaitForSingleObject(e) и WaitForMultipleObjects(e, …). Мютекс создается с помощью функции m=CreateMutex(имя_мютекса) Для открытие уже существующего мютекса предназначена функция m=OpenMutex(имя) Захват мютекса производится стандартными функциями: WaitForSingleOb- ject(m) и WaitForMultipleObjects(m, …). Функция ReleaseMutex(m) - освобожда- ет мютекс, а CloseMutex (m) – закрывает его описатель. В WindowsNT поток может рекурсивно захватывать мютекс, которым он уже владеет, при этом он не переводится в состояние ожидания. Однако необ- ходимо выполнить функцию ReleaseMutex столько раз, сколько было захватов. Аналогичный набор функций имеется и для семафоров: s=CreateSemaphore(имя, m) – создание семафора с начальным значением счетчика = m; s=OpenSemaphore(имя) - открытие существующего семафора; ReleaseSemaphore(s) - освобождение семафора; CloseSemaphore (s) - закрывает описатель семафора. Каждое использование описателя семафора в функциях WaitForSingleOb- ject(s) и WaitForMultipleObjects(s, …) - уменьшает значение счетчика семафора на 1, а каждое использование функции ReleaseSemaphore(s) увеличивает на 1. Семафор находится в установленном состоянии, когда счетчик >0, а в за- нятом, когда счетчик =0.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy