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






