ВУЗ:
Составители:
92
Основным системным вызовом для манипулирования семафором
является
int semop (int semid, struct sembuf *op_array, int count)
где semid – это ранее полученный дескриптор группы семафоров;
op_array – массив структур sembuf
struct sembuf {
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 отлично от нуля, то ядро
увеличивает на единицу число процессов, ожидающих нулевого значе-
ния семафора, а обратившийся процесс переводится в состояние ожида-
Страницы
- « первая
- ‹ предыдущая
- …
- 90
- 91
- 92
- 93
- 94
- …
- следующая ›
- последняя »
