Unix Man (Справочное руководство)



SEMOP(2)


SEMOP(2)

НАЗВАНИЕ


semop - операции над множеством семафоров

СИНТАКСИС

#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h>

int semop (semid, sops, nsops); int semid; struct sembuf **sops; unsigned nsops;

ОПИСАНИЕ


Системный вызов semop используется для выполнения набора операций над множеством семафоров, ассоциированным с идентификатором semid. Значение аргумента sops является указателем на массив структур, описывающих операции (см. СЮРПРИЗЫ). Значение аргумента nsops равно количеству структур в массиве. Каждая структура, описывающая операцию, содержит следующие поля:

short sem_num; /* Номер семафора */ short sem_op; /* Операция над семафором */ short sem_flg; /* Флаги операции */

Каждая операция, специфицированная значением sem_op, выполняется над соответствующим семафором, заданным значениями semid и sem_num.

Значение поля sem_op специфицирует одну из трех операций:

  1. Если значение sem_op отрицательно, то выполняется одно из следующих действий {Требуется право на изменение.}:
    • Если значение семафора semval [см. ] больше или равно абсолютной величине sem_op, то абсолютная величина sem_op вычитается из значения semval. Аналогично, если выражение (sem_flg & SEM_UNDO) истинно, то абсолютная величина sem_op добавляется к значению переменной semadj вызывающего процесса для заданного семафора [см. ].
    • Если значение семафора semval меньше абсолютной величины sem_op и выражение (sem_flg & IPC_NOWAIT) истинно, то сразу же возвращается управление вызывающему процессу.
    • Если значение семафора semval меньше абсолютной величины sem_op и выражение (sem_flg & IPC_NOWAIT) ложно, то увеличивается значение semncnt соответствующего семафора и приостанавливается выполнение вызывающего процесса до появления одного из следующих событий:

    Значение semval становится большим или равным абсолютной величине sem_op. Когда это происходит, то соответствующее заданному семафору значение semncnt уменьшается на 1, абсолютная величина sem_op вычитается из значения semval и, если выражение (sem_flg & IPC_UNDO) истинно, абсолютная величина sem_op добавляется к значению semadj вызывающего процесса для заданного семафора.




    Содержание  Назад  Вперед