Тип данных pthread_rwlock_t
Тип данных pthread_rwlock_t
В листинге 8.1[1] приведен текст заголовочного файла pthread_rwlock .h, в котором определен основной тип pthread_rwlock_t и прототипы функций, работающих с блокировками чтения и записи. Обычно все это находится в заголовочном файле <pthread.h>.
Листинг 8.1. Определение типа данных pthread_rwlock_t
//my_rwlock/pthread_rwlock.h
1 #ifndef __pthread_rwlock_h
2 #define __pthread_rwlock_h
3 typedef struct {
4 pthread_mutex_t rw_mutex; /* блокировка для структуры */
5 pthread_cond_t rw_condreaders; /* для ждущих читающих потоков */
6 pthread_cond_t rw_condwriters; /* для ждущих пишущих потоков */
7 int rw_magic; /* для проверки ошибок */
8 int rw_nwaitreaders;/* число ожидающих */
9 int rw_nwaitwriters;/* число ожидающих */
10 int rw_refcount;
11 /* –1, если блокировка на запись, иначе – количество блокировок на чтение */
12 } pthread_rwlock_t;
13 #define RW_MAGIC 0x19283746
14 /* порядок должен быть такой же, как у элементов структуры */
15 #define PTHREAD_RWLOCK_INITIALIZER { PTHREAD_MUTEX_INITIALIZER,
16 PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER,
17 RW_MAGIC, 0, 0, 0 }
18 typedef int pthread_rwlockattr_t; /* не поддерживается */
19 /* прототипы функций */
20 int pthread_rwlock_destroy(pthread_rwlock_t *);
21 int pthread_rwlock_init(pthread_rwlock_t *, pthread_rwlockattr_t *);
22 int pthread_rwlock_rdlock(pthread_rwlock_t *);
23 int pthread_rwlock_tryrdlock(pthread_rwlock_t *);
24 int pthread_rwlock_trywrlock(pthread_rwlock_t *);
25 int pthread_rwlock_unlock(pthread_rwlock_t *);
26 int pthread_rwlock_wrlock(pthread_rwlock_t *);
27 /* и наши функции-обертки */
28 void pthread_rwlock_destroy(pthread_rwlock_t *);
29 void pthread_rwlock_init(pthread_rwlock_t*, pthread_rwlockattr_t *);
30 void Pthread_rwlock_rdlock(pthread_rwlock_t *);
31 int Pthread_rwlock_tryrdlock(pthread_rwlock_t *);
32 int pthread_rwlock_trywrlock(pthread_rwlock_t *);
33 void pthread_rwlock_unlock(pthread_rwlock_t *);
34 void pthread_rwlock_wrlock(pthread_rwlock_t *);
35 #endif __pthread_rwlock_h
3-13 Наш тип pthread_rwlock_t содержит одно взаимное исключение, две условные переменные, один флаг и три счетчика. Мы увидим, для чего все это нужно, когда будем разбираться с работой функций нашей программы. При просмотре или изменении содержимого этой структуры мы должны устанавливать блокировку rw_mutex. После успешной инициализации структуры полю rw_magic присваивается значение RW_MAGIC. Значение этого поля проверяется всеми функциями — таким образом гарантируется, что вызвавший поток передал указатель на проинициализированную блокировку. Оно устанавливается в 0 после уничтожения блокировки.
Обратите внимание, что в счетчике rw_refcount всегда хранится текущий статус блокировки чтения-записи: –1 обозначает блокировку записи (и только одна такая блокировка может существовать в любой момент времени), 0 обозначает, что блокировка доступна и может быть установлена, а любое положительное значение соответствует количеству установленных блокировок на чтение.
14-17 Мы также определяем константу для статической инициализации нашей структуры.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Передача данных
Передача данных Как уже обсуждалось, передача данных в потоке происходит в виде сообщений. Процесс инициирует передачу данных с помощью системных вызовов write(2) и putmsg(2), которые непосредственно взаимодействуют с головным модулем. Головной модуль формирует сообщение,
Экспорт данных из базы данных Access 2007 в список SharePoint
Экспорт данных из базы данных Access 2007 в список SharePoint Access 2007 позволяет экспортировать таблицу или другой объект базы данных в различных форматах, таких как внешний файл, база данных dBase или Paradox, файл Lotus 1–2–3, рабочая книга Excel 2007, файл Word 2007 RTF, текстовый файл, документ XML
Перемещение данных из базы данных Access 2007 на узел SharePoint
Перемещение данных из базы данных Access 2007 на узел SharePoint Потребности многих приложений Access 2007 превышают простую потребность в управлении и сборе данных. Часто такие приложения используются многими пользователями организации, а значит, имеют повышенные потребности в
Спасение данных из поврежденной базы данных
Спасение данных из поврежденной базы данных Возможно, что все вышеприведенные действия не приведут к восстановлению базы данных. Это означает, что база серьезно повреждена и либо совсем не подлежит восстановлению как единое целое, либо для ее восстановления понадобится
Проверка введенных данных на уровне процессора баз данных
Проверка введенных данных на уровне процессора баз данных Помимо проверки данных во время ввода информации, следует знать о том, что можно также выполнять проверку и на уровне процессора баз данных. Такая проверка обычно более надежна, поскольку применяется независимо
Булев тип данных
Булев тип данных Переменная булевого типа занимает один байт памяти и может принимать только одно из двух значений: True ("истина", "да", 1) или False ("ложь", "нет", 0). Булев тип обозначается при помощи ключевого слова
Обновление базы данных с помощью объекта адаптера данных
Обновление базы данных с помощью объекта адаптера данных Адаптеры данных могут не только заполнять для вас таблицы объекта DataSet. Они могут также поддерживать набор объектов основных SQL-команд, используя их для возвращения модифицированных данных обратно в хранилище
Глава 2 Ввод данных. Типы, или форматы, данных
Глава 2 Ввод данных. Типы, или форматы, данных Работа с документами Excel сопряжена с вводом и обработкой различных данных, то есть ин формации, которая может быть текстовой, числовой, финансовой, статистической и т. д. МУЛЬТИМЕДИЙНЫЙ КУРС Методы ввода и обработки данных
Обработка баз данных
Обработка баз данных Данные лучше всего хранить в базах данных (БД). Excel позволяет организовать и обрабатывать их. Простейшие БД – это таблицы, например списки клиентов с их определенными характеристиками. Самое простое, что можно с ними делать, – сортировать. Excel
Модель данных <> база данных
Модель данных <> база данных Тот "мир", который был получен в процессе описания и анализа, является черновиком для структур ваших данных. Считается, что логическая модель должна описывать отношения и наборы. Обычная ошибка (и западня, присущая всем инструментам CASE) слепо
Передача данных
Передача данных Код для отправки и посылки файлов приведен в листинге 12.5.Листинг 12.5private void butSend_Click(object sender, EventArgs e) { // Открываем файл для отправки и получаем его поток Stream fileStream; try { fileStream = new FileStream(fileSend, FileMode.Open); } catch (Exception exFile) { MessageBox.Show("Не могу открыть " + exFile.ToString());
Рендеризация данных
Рендеризация данных Рендеринг – это смешение всех мультимедийных файлов в один мастер-файл – файл, который создается как окончательный продукт, после того как создан окончательный микс и его компоненты финализированы с помощью эквалайзера, компрессии, установок
Базы данных (классы для работы с базами данных)
Базы данных (классы для работы с базами данных) В MFC включены несколько классов, обеспечивающую поддержку приложений, работающих с базами данных. В первую очередь это классы ориентированные на работу с ODBC драйверами – CDatabase и CRecordSet. Поддерживаются также новые средства для