ВУЗ:
Составители:
251
short sem_num; /* номер семафора: 0,1,2..n */
short sem_op; /* операция с семафором */
short sem_flg; /* флаги операции: 0, IPC_NOWAIT, SEM_UNDO */
};
определенных в файле <sys/sem.h> и содержащих описания опера-
ций над семафорами группы, a count – количество элементов массива.
Значение, возвращаемое системным вызовом, является значением по-
следнего обработанного семафора.
Если указанные в массиве op_array номера семафоров не выходят
за пределы общего размера набора семафоров, то системный вызов по-
следовательно меняет значение семафора (если это возможно) в соот-
ветствии со значением поля «операция». Возможны три случая:
1. Отрицательное значение sem_op.
2. Положительное значение sem_op.
3. Нулевое значение sem_op.
Если значение поля операции sem_op отрицательно и его абсолют-
ное значение меньше или равно значению семафора semval, то ядро
прибавляет это отрицательное значение к значению семафора. Если в
результате значение семафора стало нулевым, то ядро активизирует все
процессы, ожидающие нулевого значения этого семафора. Если же зна-
чение поля операции sem_op по абсолютной величине больше семафора
semval, то ядро увеличивает на единицу число процессов, ожидающих
увеличения значения семафора и усыпляет текущий процесс до наступ-
ления этого события.
Если значение поля операции sem_op положительно, то оно при-
бавляется к значению семафора semval, а все процессы, ожидающие
увеличения значения семафора, активизируются (пробуждаются в тер-
минологии Unix).
Если значение поля операции sem_op равно нулю и значение сема-
фора semval также равно нулю, выбирается следующий элемент массива
op_array. Если же значение семафора semval отлично от нуля, то ядро
увеличивает на единицу число процессов, ожидающих нулевого значе-
ния семафора, а обратившийся процесс переводится в состояние ожида-
ния. При использовании флага IPCNOWAIT ядро ОС Unix не блокирует
текущий процесс, а лишь сообщает в ответных параметрах о возникно-
вении ситуации, приведшей к блокированию процесса при отсутствии
флага IPCNOWAIT.
Страницы
- « первая
- ‹ предыдущая
- …
- 249
- 250
- 251
- 252
- 253
- …
- следующая ›
- последняя »
