Локальные сети персональных компьютеров. Работа с сервером Novell NetWare


Семафоры - часть 2


Если семафор уже создан другим процессом, этот параметр игнорируется. В качестве начального значения вы можете использовать единицу.

Параметр SemaphoreHandle - указатель на переменную, в которую будет записан индекс открытого семафора. Этот индекс необходим для выполнения всех операций с семафором.

Параметр OpenCount - счетчик использования семафора. Когда очередной процесс открывает данный семафор, счетчик увеличивает свое значение на единицу.

Функция возвращает 0 при успешном завершении или код ошибки:

Код ошибки Значение
0xFE Неправильная длина имени семафора
0xFF Неправильное начальное значение семафора

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

int CloseSemaphore(long SemaphoreHandle);

В качестве параметра этой функции указывается индекс закрываемого семафора.

Функция возвращает 0 при успешном завершении или код ошибки:

Код ошибки Значение
0xFF Неправильное значение индекса семафора

С помощью функции ExamineSemaphore() вы можете узнать текущее состояние семафора:

int ExamineSemaphore(long SemaphoreHandle, int *SemaphoreValue, WORD *OpenCount);

Для заданного первым параметра семафора функция возвращает значение семафора (параметр SemaphoreValue) и счетчик использования (параметр OpenCount).

Функция возвращает 0 при успешном завершении или код ошибки:

Код ошибки Значение
0xFF Неправильное значение индекса семафора

Перед использованием критического ресурса программа должна вызвать функцию WaitOnSemaphore(), уменьшающую значение семафора:

int WaitOnSemaphore(long SemaphoreHandle, WORD Timeout);

Параметр SemaphoreHandle определяет используемый семафор.

С помощью параметра Timeout определяется время, в течение которого функция ожидает доступность ресурса (в 18-х долях секунды).

Функция возвращает 0 при успешном завершении или код ошибки:

Код ошибки Значение
0xFE Истекло время ожидания, заданное параметром Timeout
0xFF Неправильное значение индекса семафора

Функция SignalSemaphore(), увеличивающая значение семафора, имеет следующий прототип:




Начало  Назад  Вперед



Книжный магазин