Книга: UNIX: взаимодействие процессов

Функция sem_post

Функция sem_post

В листинге 10.32 приведен текст функции sem_post, которая увеличивает значение семафора, возобновляя выполнение всех процессов, заблокированных в ожидании этого события.

Листинг 10.32. Функция sem_post

//my_pxsem_mmap/sem_post.с
1  #include "unpipc.h"
2  #include "semaphore.h"
3  int
4  mysem_post(mysem_t *sem)
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  if (sem->sem_count == 0)
16   pthread_cond_signal(&sem->sem_cond);
17  sem->sem_count++;
18  pthread_mutex_unlock(&sem->sem_mutex);
19  return(0);
20 }

11-18 Прежде чем работать со структурой, нужно заблокировать соответствующее взаимное исключение. Если значение семафора изменяется с 0 на 1, нужно вызвать pthread_cond_signal, чтобы возобновилось выполнение одного из процессов, зарегистрированных на уведомление по данной условной переменной.

Оглавление книги


Генерация: 0.888. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз