Книги автора: UNIX: разработка сетевых приложенийUNIX Network Programming
UNIX: взаимодействие процессовUNIX Network Programming. Volume 2 Second Edition. Interprocess Communications
/ Книги автора: UNIX: разработка сетевых приложенийUNIX Network Programming
UNIX: взаимодействие процессовUNIX Network Programming. Volume 2 Second Edition. Interprocess Communications
/ Книга: UNIX: взаимодействие процессов
Функция sem_wait
Функция sem_wait
Следующая функция приведена в листинге 10.42; она называется sem_wait и ожидает изменения значения семафора с нулевого на ненулевое, после чего уменьшает значение семафора на 1.
11-16 Мы вызываем semop с операцией, уменьшающей значение семафора на 1.
Листинг 10.42. Функция sem_wait
//my_pxsem_svsem/sem_wait.c
1 #include "unpipc.h"
2 #include "semaphore.h"
3 int
4 mysem_wait(mysem_t *sem)
5 {
6 struct sembuf op;
7 if (sem->sem_magic != SEM_MAGIC) {
8 errno = EINVAL;
9 return(-1);
10 }
11 op.sem_num = 0;
12 op.sem_op = –1;
13 op.sem_flg = 0;
14 if (semop(sem->sem_semid, &op, 1) < 0)
15 return(-1);
16 return(0);
17 }
Похожие страницы
- Функция sem_unlink
- Функция sem_close
- 10.3. Функции sem_wait и sem_trywait
- Функция sem_trywait
- 10.16. Реализация с использованием семафоров System V
- Синхронизация с помощью семафоров
- Мьютексы
- 10.14. Реализация с использованием FIFO
- 10.9. Несколько производителей, один потребитель
- Листинг 3.2. (system.c) Использование функции system()