Читаем Введение в QNX/Neutrino 2 полностью

СостояниеОзначает
CONDVARожидание соответствующей ждущей блокировке условной переменной
MUTEXожидание мутекса
READYсостояние готовности, т.е., готов выполняться или уже выполняется
INTERRUPTожидание прерывания от аппаратных средств
ДействиеВладелец мутексаСостояние «потребителя»Состояние «производителя»
«потребитель» блокирует мутекс«потребитель»READYINTERRUPT
«потребитель» проверяет флаг data_ready«потребитель»READYINTERRUPT
потребитель вызывает функцию pthread_sleepon_wait()«потребитель»READYINTERRUPT
функция pthread_sleepon_wait() разблокирует мутексмутекс свободенREADYINTERRUPT
функция pthread_sleepon_wait() блокируетсямутекс свободенCONDVARINTERRUPT
пауза до прерываниямутекс свободенCONDVARINTERRUPT
аппаратные средства генерируют данныемутекс свободенCONDVARREADY
«производитель» блокирует мутекс«производитель»CONDVARREADY
«производитель» устанавливает флаг data_ready«производитель»CONDVARREADY
«производитель» вызывает pthread_sleepon_signal()«производитель»CONDVARREADY
«потребитель» «пробуждается», функция pthread_sleepon_wait() пытается заблокировать мутекс«производитель»MUTEXREADY
«производитель» разблокирует мутексмутекс свободенMUTEXREADY
«потребитель» получает мутекс«потребитель»READYREADY
«потребитель» обрабатывает данные«потребитель»READYREADY
«производитель» ждет новых данных от аппаратуры«потребитель»READYINTERRUPT
пауза («потребитель» обрабатывает полученные данные)«потребитель»READYINTERRUPT
«потребитель» завершает обработку и разблокирует мутексмутекс свободенREADYINTERRUPT
«потребитель» возвращается в начало цикла и блокирует мутекс«потребитель»READYINTERRUPT

Последняя строка в таблице повторяет первую — мы совершили один полный цикл.

Каково назначение флага data_ready? Он служит для двух целей:

• Он является флагом состояния — посредником между «потребителем» и «производителем», указывающим на состояние системы. Если флаг установлен в состояние 1, это означает, что данные доступны для обработки; если этот флаг установлено в состояние 0, это означает, что данных нет, и поток-потребитель должен быть заблокирован.

• Он выполняет функцию «места, где происходит синхронизация со ждущей блокировкой». Более формально говоря, адрес переменной data_ready используется как уникальный идентификатор объекта, по которому осуществляется ждущая блокировка. Мы запросто могли бы применить «(void*)12345» вместо «&data_ready» — библиотеке ждущих блокировок все равно, что это за идентификатор, лишь бы он был уникален и корректно использовался. Использование же в качестве идентификатора адреса переменной есть надежный способ сгенерировать уникальный номер, поскольку не бывает же двух переменных с одинаковым адресом!

• К обсуждению различий между функциями pthread_sleepon_signal() и pthread_sleepon_broadcast() мы еще вернемся в разговоре об условных переменных.

<p>Условные переменные</p>

Условные переменные (или «condvars») очень похожи на ждущие блокировки, которые мы рассматривали выше. В действительности, ждущие блокировки — это надстройка над механизмом условных переменных, и именно поэтому в таблице, иллюстрировавшей использование ждущих блокировок, у нас встречалось состояние CONDVAR. Функция pthread_cond_wait() точно так же освобождает мутекс, ждет, а затем повторно блокирует мутекс, аналогично функции pthread_sleepon_wait().

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных