Книга: UNIX: взаимодействие процессов
Функция pthread_rwlock_trywrlock
Функция pthread_rwlock_trywrlock
Неблокируемая функция pthread_rwlock_trywrlock показана в листинге 8.7.
11-14 Если значение счетчика rw_refcount отлично от нуля, блокировка в данный момент уже установлена считывающим или записывающим процессом (это безразлично) и мы возвращаем ошибку с кодом EBUSY. В противном случае мы устанавливаем блокировку на запись, присвоив переменной rw_refcount значение –1.
Листинг 8.7. Функция pthread_rwlock_trywrlock: попытка получения блокировки на запись
//my_rwlock/pthread_rwlock_trywrlock.c
1 #include "unpipc.h"
2 #include "pthread_rwlock.h"
3 int
4 pthread_rwlock_trywrlock(pthread_rwlock_t *rw)
5 {
6 int result;
7 if (rw->rw_magic != RW_MAGIC)
8 return(EINVAL);
9 if ((result = pthread_mutex_lock(&rw->rw_mutex)) != 0)
10 return(result);
11 if (rw->rw_refcount != 0)
12 result = EBUSY; /* заблокирован пишущим потоком или ожидающим возможности записи */
13 else
14 rw->rw_refcount = –1; /* доступна */
15 pthread_mutex_unlock(&rw->rw_mutex);
16 return(result);
17 }
- Функция pthread_rwlock_tryrdlock
- Функция pthread_rwlock_unlock
- Функция pthread_rwlock destroy
- Тип данных pthread_rwlock_t
- Функция pthread_rwlock_wrlock
- 2.1.3. Функция getopt_long()
- Группировка по встроенным функциям и UDF
- 19.1.1. Функция jQuery()
- Функция strcmp( )
- Управление функциями узла
- Функция программного обеспечения
- 3.2. Ключи типа key_t и функция ftok