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



SEMOP(2) - часть 2


Идентификатор множества семафоров, над которым вызывающий процесс выполняет операцию, удаляется из системы [см. ]. Когда это происходит, переменной errno присваивается значение EIDRM и вызывающему процессу возвращается -1.

Вызывающий процесс получает сигнал, который должен быть обработан. Когда это происходит, значение semncnt, соответствующее заданному семафору, уменьшается на 1 и вызывающий процесс возобновляет выполнение так, как описано в .

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

      Идентификатор множества семафоров, над которым вызывающий процесс выполняет операцию, удаляется из системы. Когда это происходит, переменной errno присваивается значение EIDRM и вызывающему процессу возвращается -1.

      Вызывающий процесс получает сигнал, который должен быть обработан. Когда это происходит, значение semzcnt, соответствующее заданному семафору, уменьшается на 1 и вызывающий процесс возобновляет выполнение так, как описано в .

      Системный вызов semop завершается неудачей, если по крайней мере для одной операции из набора выполнено хотя бы одно из следующих условий:




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