Совместное использование событий и мьютексов

Совместное использование событий и мьютексов

Далее показано, как обеспечить совместное использование мьютексов и событий путем обобщения программы 8.2, представляющей описанную ниже ситуацию, с которой нам еще не раз предстоит столкнуться. Примечание. Это обсуждение в равной степени применимо как к мьютексам, так и к объектам CRITICAL_SECTION.

• Как мьютекс, так и событие связываются с блоком сообщений или иной структурой данных.

• Мьютекс определяет критический участок кода для доступа к объекту структуры данных.

• Событие используется для того, чтобы сигнализировать о появлении нового сообщения.

• Обобщая, можно утверждать, что мьютекс обеспечивает соблюдение условий, определяемых инвариантами объекта (то есть поддерживает свойства безопасности), а событие сигнализирует о том, что состояние объекта изменилось (например, сообщение было добавлено в буфер сообщений или удалено из него), и он мог перейти в известное состояние (например, в буфере сообщений присутствует, по крайней мере, одно сообщение).

• Один поток (в программе 8.2 — поток производителя) блокирует структуру данных, изменяет состояние объекта путем создания нового сообщения и применяет функции SetEvent или PulseEvent к событию, связанному с появлением нового сообщения.

• По крайней мере, один поток из числа остальных (в данном примере — поток потребителя) ожидает наступления события, сигнализирующего о том, что объект достиг требуемого состояния. Ожидание должно выполняться за пределами критического участка кода, чтобы поток производителя мог иметь доступ к объекту.

• Кроме того, поток потребителя может блокировать мьютекс, проверить состояние объекта (например, поступило ли в буфер новое сообщение) и отказаться от ожидания события, если объект уже находится в требуемом состоянии. 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

У9.3 Совместное использование стека достижимых элементов

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

У9.3 Совместное использование стека достижимых элементов (Это упражнение подразумевает знакомство с результатами лекции 18) Перепишите компонент available, задающий стек достижимых элементов при подходе на уровне компонентов. Единственный стек должен совместно


У9.4 Совместное использование

Из книги Системное программирование в среде Windows автора Харт Джонсон М

У9.4 Совместное использование (Это упражнение подразумевает, что вы выполнили предыдущее и прочитали все лекции, включая лекцию 18) Можно ли сделать available стек разделяемым всеми связными списками произвольных


Совместное использование и репликация

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Совместное использование и репликация Из приведенного примера вытекает основная проблема дублируемого наследования: каков смысл компонентов дублируемого потомка (FRENCH_US_DRIVER), полученных от дублируемого предка (DRIVER)?Рассмотрим компонент age. Он наследуется от обоих


Совместное использование объектов ядра приложениями и службами

Из книги Справочник по JavaScript автора Коллектив авторов

Совместное использование объектов ядра приложениями и службами Возможны ситуации, в которых служба и приложения разделяют объект ядра. Например, служба может использовать именованный мьютекс для защиты разделяемой области памяти, используемой для обмена данными с


4.26 Совместное использование сетевого интерфейса

Из книги Сетевые средства Linux автора Смит Родерик В.

4.26 Совместное использование сетевого интерфейса Как уже отмечалось, несложно найти локальные и региональные сети, использующие одновременно несколько протоколов. На практике один сетевой узел иногда посылает и принимает данные по нескольким протоколам через единый


Совместное использование HTML и JavaScript

Из книги Технология XSLT автора Валиков Алексей Николаевич

Совместное использование HTML и JavaScript Прежде всего надо рассмотреть тег <SCRIPT>. Этот тег служит для вставки скриптов в HTML-код страницы. Его формат:<SCRIPT [language="{Язык программирования, на котором написан скрипт}"] [src="{Адрес файла со скриптом}"]>. . . Текст скрипта</SCRIPT>Текст


Совместное использование PostScript-принтеров

Из книги Самоучитель работы на Macintosh автора Скрылина Софья

Совместное использование PostScript-принтеров В ходе предыдущего обсуждения не затрагивался вопрос об использовании драйверов. Этот вопрос чрезвычайно важен для разделения принтеров в системе Samba; драйверы принтеров часто становятся источником проблем. В системе Windows


Совместное использование принтеров, не поддерживающих PostScript

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Совместное использование принтеров, не поддерживающих PostScript Существуют два способа настройки Samba для работы с принтерами, не поддерживающими PostScript. Первый способ заключается в использовании PostScript-драйвера на клиентской машине и настройке очереди печати Linux для


Глава 8 Совместное использование файлов с помощью NFS

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

Глава 8 Совместное использование файлов с помощью NFS Протоколы Server Message Block (SMB)/Common Internet Filesystem (CIFS), рассмотренные в предыдущей главе, очень удобны для организации совместного доступа к файлам и принтерам клиентов, работающих под управлением DOS, Windows, OS/2 и многих других


Глава 9 Совместное использование принтеров

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Глава 9 Совместное использование принтеров Система печати, используемая в Linux, первоначально была разработана для BSD UNIX. Эта система, которую также называют по имени ее основного компонента LPD (Line Printer Daemon — демон принтера), намного проще, чем системы печати Windows и MacOS, и в то


1.10.7. Совместное использование файлов и папок

Из книги автора

1.10.7. Совместное использование файлов и папок На каждом Маке в окне жесткого диска находится папка Пользователи (Users), в которой хранятся домашние папки всех пользователей данного компьютера. Раскрыв любую из них, кроме своей домашней папки (на рис. 1.116 пользователь sn


12.3. Совместное использование каталогов в Linux Mandrake

Из книги автора

12.3. Совместное использование каталогов в Linux Mandrake Конфигуратор diskdrake-fileshare позволяет очень быстро настроить пакет Samba для разрешения совместного использования каталогов («расшаривания» каталогов). Убедитесь, что запущены сервисы nfs и smb, если это не так, запустите их:# service


Совместное использование образцов и библиотек

Из книги автора

Совместное использование образцов и библиотек В свете последних тенденций глобализации и международного разделения труда будет нелишним разговор о совместном использовании образцов и целых библиотек. Речь в данном разделе пойдет о том, как сделать наши образцы


Совместное использование gds32.dll, InterBase.msg и mscvrt.dll

Из книги автора

Совместное использование gds32.dll, InterBase.msg и mscvrt.dll Представьте ситуацию, когда на одном компьютере оказались два приложения, использующие клиент InterBase. Первое приложение успешно инсталлировалось, установив вместе с собой InterBase-клиента. Второе приложение в процессе


Совместное использование файлов

Из книги автора

Совместное использование файлов InterBase-сервер может быть встроен не только в ваше серверное программное обеспечение, поэтому основные файлы, входящие в состав его установки, надо зарегистрировать в Windows. Регистрация происходит точно так же, как описано выше в разделе