Функция sem_wait
Функция sem_wait
В листинге 10.33 приведен текст функции sem_wait, которая ожидает изменения значения семафора с 0 на положительное, после чего уменьшает его на 1.
Листинг 10.33. Функция sem_wait
//my_pxsem_mmap/sem_wait.с
1 #include "unpipc.h"
2 #include "semaphore.h"
3 int
4 mysem_wait(mysem_t *sem)
5 {
6 int n;
7 if (setn->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 while (sem->sem_count == 0)
16 pthread_cond_wait(&sem->sem_cond, &sem->sem_mutex);
17 sem->sem_count--;
18 pthread_mutex_unlock(&sem->sem_mutex);
19 return(0);
20 }
11-18 Прежде чем работать с семафором, нужно заблокировать соответствующее взаимное исключение. Если значение семафора 0, выполнение процесса приостанавливается в вызове pthread_cond_wait до тех пор, пока другой процесс не вызовет pthread_cond_signal для этого семафора, изменив его значение с 0 на 1. После того как значение становится ненулевым, мы уменьшаем его на 1 и разблокируем взаимное исключение.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Функция pthread_rwlock_trywrlock
Функция pthread_rwlock_trywrlock Неблокируемая функция pthread_rwlock_trywrlock показана в листинге 8.7.11-14 Если значение счетчика rw_refcount отлично от нуля, блокировка в данный момент уже установлена считывающим или записывающим процессом (это безразлично) и мы возвращаем ошибку с кодом EBUSY. В
Функция pthread_rwlock_unlock
Функция pthread_rwlock_unlock Последняя функция, pthread_rwlock_unlock, приведена в листинге 8.8.Листинг 8.8. Функция pthread_rwlock_unlock: разблокирование ресурса//my_rwlock/pthread_rwlock_unlock.c1 #include "unpipc.h"2 #include "pthread_rwlock.h"3 int4 pthread_rwlock_unlock(pthread_rwlock_t *rw)5 {6 int result;7 if (rw->rw_magic != RW_MAGIC)8 return(EINVAL);9 if ((result =
10.3. Функции sem_wait и sem_trywait
10.3. Функции sem_wait и sem_trywait Функция sem_wait проверяет значение заданного семафора на положительность, уменьшает его на единицу и немедленно возвращает управление процессу. Если значение семафора при вызове функции равно нулю, процесс приостанавливается, до тех пор пока оно
Функция sem_wait
Функция sem_wait Последняя функция для работы с именованными семафорами Posix — sem_wait. Ее текст приведен в листинге 10.26.Листинг 10.26. Функция sem_wait//my_pxsem_fifo/sem_wait.с1 #include "unpipc.h"2 #include "semaphore.h"3 int4 mysem_wait(mysem_t *sem)5 {6 char c;7 if (sem->sem_magic != SEM_MAGIC) {8 errno = EINVAL;9 return(-1);10 }11 if
Функция sem_wait
Функция sem_wait В листинге 10.33 приведен текст функции sem_wait, которая ожидает изменения значения семафора с 0 на положительное, после чего уменьшает его на 1.Листинг 10.33. Функция sem_wait//my_pxsem_mmap/sem_wait.с1 #include "unpipc.h"2 #include "semaphore.h"3 int4 mysem_wait(mysem_t *sem)5 {6 int n;7 if (setn->sem_magic !=
Функция SUM
Функция SUM Ваши возможности в подведении итогов не ограничены простым подсчетом записей. Используя функцию SUM, можно генерировать итоговые результаты для всех возвращаемых записей по любым числовым полям. Например, для создания запроса, который генерирует итоги по
Функция uni()
Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book
Функция uni()
Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book
Хэш-функция.
Хэш-функция. Еще одно важное преимущество использования PGP состоит в том, что PGP применяет так называемую «хэш-функцию», которая действует таким образом, что в том случае какого-либо изменения информации, пусть даже на один бит, результат «хэш-функции» будет совершенно
Функция uni()
Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book
Хэш-функция
Хэш-функция Однако описанная выше схема имеет ряд существенных недостатков. Она крайне медлительна и производит слишком большой объём данных — по меньшей мере вдвое больше объёма исходной информации. Улучшением такой схемы становится введение в процесс преобразования