Файл semaphor.h содержит определения типа Semaphore и функций управления семафорами.
Функция
Semaphore *SemAlloc(int initvalue);
выделят память для дескриптора семафора, инициализирует его с помощью функции SemInit. В случае успешного выполнения SemAlloc возвращает указатель на созданный дескриптор, иначе результатом является NULL.
Функция
void SemInit(Semaphore *sem, int initvalue);
записывает в дескриптор семафора sem начальные данные и присваивает счетчику семафора значение initvalue.
Макрофункция SEMAPHOREINIT, как и SemInit инициализирует переменную типа Semaphore.
Процесс, вызвавший функцию
void SemWait (Semaphore *sem);
приостанавливается, если счетчик семафора имеет значение 0. В противном случае значение счетчика семафора уменьшается на единицу, а процесс продолжает работу. Приостановленные процессы помещаются в очередь к семафору и не исполняются, пока какой-нибудь процесс не увеличит счетчик семафора. Это можно сделать с помощью функции
void SemSignal(Semaphore *sem);
Выполнение этой функции
приводит к тому, что следующий процесс из очереди к семафору sem
возобновляет работу. Если очередь к семафору пустая, то значение
счетчика семафора увеличивается на единицу.