Книга: UNIX: взаимодействие процессов
Функция sem_getvalue
Функция sem_getvalue
В листинге 10.35 приведен текст последней функции в этой реализации — sem_getvalue. Она возвращает текущее значение семафора.
11-16 Мы блокируем соответствующее взаимное исключение и считываем значение семафора.
Листинг 10.35. Функция sem_getvalue
//my_pxsem_mmap/sem_getvalue.c
1 #include "unpipc.h"
2 #include "semaphore.h"
3 int
4 mysem_getvalue(mysem_t *sem, int *pvalue)
5 {
6 int n;
7 if (sem->sem_magic != SEM_MAGIC) {
8 errno = EINVAL;
9 return(-1);
10 }
11 if ((n = pthread_mutex_lock(&sem->sem_mutex)) != 0) {
12 errno = n;
13 return(-1);
14 }
15 *pvalue = sem->sem_count;
16 pthread_mutex_unlock(&sem->sem_mutex);
17 return(0);
18 }
Из этой реализации видно, что семафорами пользоваться проще, чем взаимными исключениями и условными переменными.
- Функция sem_wait
- Функция sem_unlink
- SEMAPHORE COUNT
- Файл AssemblyInfo.cs в Visual Studio 2005
- Assembly language, the second generation language
- Single and Multi-File Assemblies
- 10.16. Реализация с использованием семафоров System V
- 4.4.5. Обычные потоковые семафоры
- Листинг 3.2. (system.c) Использование функции system()
- 10.15. Реализация с помощью отображения в память