Мои Конспекты
Главная | Обратная связь

...

Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

Реализация компонента преобразования блокировка-асинхронность





Помощь в ✍️ написании работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Компонент, который мы создадим, предполагает, что выполняется только один поток VCL, так что асинхронный интерфейс будет предусмотрен только для одного потока. Операции блокировки, обеспечиваемые этим буфером, будут работать с точно теми же ограничениями, как и в примере ограниченного буфера в предыдущей главе, и следовательно, любое число блокирующих потоков будет способно параллельно иметь доступ к блокировочному интерфейсу. Подобно тому, как ограниченный буфер допускал простые операции Get и Put, вовлекающие только один элемент, для блокировочно-асинхронного буфера (в дальнейшем называемого БАБ), также допустимы простые действия, включающие только один элемент. Семантика интерфейса будет такой:

· Creation: При создании компонент БАБ создаст требуемые внутренние буферные структуры данных и потоки и будет генерировать событие OnWrite, сигнализируя, то данные могут быть записаны в буфер потоком VCL.

· Reading: Компонент предоставит две функции чтения; BlockingRead и AsyncRead. BlockingRead будет использоваться рабочими потоками, а AsyncRead - потоком VCL.

· Read Notifications: Компонент вызовет в главном потоке VCL событие OnRead, когда возможна асинхронная операция чтения, т.е., данные ждут чтения потоком VCL. Так как эта реализация компонента имеет дело только с чтением и записью указателей, можно считать, что только один элемент может быть прочитан при каждом уведомлении, и поток VCL должен ожидать следующего уведомления до попытки нового чтения.

· Writing: Компонент БАБ предоставит две функции; BlockingWrite и AsyncWrite. BlockingWrite будет использоваться рабочими потоками, а AsyncWrite - потоком VCL.

· Write Notifications: Компонент вызовет в главном потоке VCL событие OnWrite, когда может пройти асинхронная операция записи, т.е., в буфере имеется свободное место, куда может быть записан элемент. И опять же поддерживается взаимосвязь один-к-одному между уведомлениями и успешными записями, и поток VCL должен выполнять только одну попытку записи и ожидать следующего уведомления.

· Peek operations: Любой поток будет способен узнать, сколько входов буфера свободны или заняты в конкретном направлении. Эта операция может быть полезна для рабочих потоков, которые таким образом узнают, будут ли BlockingRead или BlockingWrite в действительности вызывать блокировку. Поток VCL не должен использовать эти функции для определения, можно ли читать или писать, и полагаться на уведомления.

Доверь свою работу ✍️ кандидату наук!
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой



Поиск по сайту:







©2015-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.