Книга: 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 }

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


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