Функция 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 }

Из этой реализации видно, что семафорами пользоваться проще, чем взаимными исключениями и условными переменными.

Данный текст является ознакомительным фрагментом.