Прежде отметим, что в стандарте POSIX семафоры полностью аналогичны семафорам Дейкстры. Для инициализации значения таких семафоров применяется функция sem_init(), аналогом операции служит функция sem_wait(), а аналогом операции – функция sem_post().
В современных операционных системах Unix набор операций над семафорами отличается от классического набора операций Дейкстры. Этот набор включает в себя три операции:
· (, ) – увеличить значение семафора на величину ;
· (, ) – пока значение семафора <, процесс блокируется; в противном случае выполняется присваивание =-;
· () – процесс блокируется до тех пор, пока значение семафора не станет равным 0.
Изначально все семафоры инициируются нулевым значением.
Легко видеть, что операции Дейкстры () соответствует операция (,1), а операции () - операция (,1).
Системный вызов semget(key, nsems, semflag) обеспечивает создание набора семафоров. Здесь параметр key можно интерпретировать как имя набора семафоров, nsems – количество семафоров в наборе, параметр semflag определяет, главным образом, права различных пользователей при доступе к данному набору семафоров.
Системный вызов semop(). Системный вызов semop() обладает довольно сложной семантикой и используется для выполнения рассмотренных выше операций A, D и Z над семафорами из заданного набора семафоров.
Системный вызов semctl() используется для получения информации о наборе семафоров, изменения его атрибутов, а также для удаления из системы набора семафоров после завершения использовавших этот набор процессов.