Семафоры - часть 3
int SignalSemaphore(long SemaphoreHandle);
Индекс семафора задается параметром функции.
Функция возвращает 0 при успешном завершении или код ошибки:
Код ошибки | Значение |
0x01 | Переполнение семафора, значение семафора стало больше 127 |
0xFF | Неправильное значение индекса семафора |
Для работы с семафорами можно использовать функцию C5h прерывания INT21h. В зависимости от содержимого регистра AL эта функция выполняет ту или иную операцию с семафором.
Открытие семафора:
На входе: | AH | = | C5h; |
AL | = | 00h; | |
DS:DX | = | Адрес имени семафора; | |
CL | = | Начальное значение семафора. | |
На выходе: | AL | = | Код ошибки или 0, если операция завершилась без ошибок. |
Определение состояния семафора:
На входе: | AH | = | C5h; |
AL | = | 01h; | |
CX,DX | = | Индекс семафора; | |
На выходе: | AL | = | Код ошибки или 0, если операция завершилась без ошибок; |
CX | = | Значение семафора; | |
DL | = | Счетчик использований семафора. |
Уменьшение значения семафора:
На входе: | AH | = | C5h; |
AL | = | 02h; | |
CX,DX | = | Индекс семафора; | |
BP | = | Время ожидания. | |
На выходе: | AL | = | Код ошибки или 0, если операция завершилась без ошибок. |
Увеличение значения семафора:
На входе: | AH | = | C5h; |
AL | = | 03h; | |
CX,DX | = | Индекс семафора. | |
На выходе: | AL | = | Код ошибки или 0, если операция завершилась без ошибок. |
Закрытие семафора:
На входе: | AH | = | C5h; |
AL | = | 04h; | |
CX,DX | = | Индекс семафора. | |
На выходе: | AL | = | Код ошибки или 0, если операция завершилась без ошибок. |