Книга: UNIX: взаимодействие процессов
Функция pthread_rwlock_wrlock
Функция pthread_rwlock_wrlock
Текст функции pthread_rwlock_wrlock приведен в листинге 8.6.
11-17 Если ресурс заблокирован на считывание или запись (значение rw_refcount отлично от 0), мы приостанавливаем выполнение потока. Для этого мы увеличиваем rw_nwaitwriters и вызываем pthread_cond_wait с условной переменной rw_condwriters. Для этой переменной посылается сигнал при снятии блокировки чтения-записи, если имеются ожидающие разрешения на запись процессы.
18-19 После получения блокировки на запись мы устанавливаем значение rw_refcount в –1.
Листинг 8.6. Функция pthread_rwlock_wrlock: получение блокировки на запись
//my_rwlock/pthread_rwlock_wrlock.c
1 #include "unpipc.h"
2 #include "pthread_rwlock.h"
3 int
4 pthread_rwlock_wrlock(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 while (rw->rw_refcount != 0) {
12 rw->rw_nwaitwriters++;
13 result = pthread_cond_wait(&rw->rw_condwriters, &rw->rw_mutex);
14 rw->rw_nwaitwriters--;
15 if (result != 0)
16 break;
17 }
18 if (result == 0)
19 rw->rw_refcount = –1;
20 pthread_mutex_unlock(&rw->rw_mutex);
21 return(result);
22 }
- Функция pthread_rwlock_trywrlock
- Функция pthread_rwlock_tryrdlock
- Функция pthread_rwlock_unlock
- Функция pthread_rwlock destroy
- Тип данных pthread_rwlock_t
- Функция pthread_rwlock_rdlock
- 2.1.3. Функция getopt_long()
- Группировка по встроенным функциям и UDF
- 19.1.1. Функция jQuery()
- Функция strcmp( )
- Управление функциями узла
- Функция программного обеспечения