Cntm.Synchro


Подробное описание

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

К этим средствам относятся такие понятия, как синхропространства, синхрообъекты, отложенные операции. Эти средства являются фундаментом, обеспечивающим надежное взаимодействие компонентов в многопоточных системах, предоставляющим механизмы, которые сводят к минимуму влияние поведения одного компонента на другой при их взаимодействии. Все средства, предосталяемые этим пакетом, используют подсчет ссылок.

Синхропространства

Понятие синхропространства

Пакет предоставляет механизм, обеспечивающий синхронизацию потоков и выполнение отложенных (сериализованных) операций. Этот механизм называется синхропространством.

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

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

В программе м.б. несколько синхропространств. Синхропространству соответствует класс Cntm::SynchroSpace. Более детальное описание функций синхропространства приведено в документации по классу Cntm::SynchroSpace.

Типы синхропространств

Синхропространства делятся на 2 типа: главные и дополнительные. В программе м.б. только одно главновное синхропространство и несколько дополнительных.

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

Главные синхропространства могут сами полностью реализовывать свои функции либо интегрироваться с другими библиотеками, предоставляющими подобную функциональность (на данный момент реализована интеграция с библиотекой QT). Главному синхропространству, которое само реализует все функции, соответствует класс Cntm::MainSynchroSpace. Для интеграции с QT следует использовать класс Cntm::QTMainSynchroSpace. Интеграция заключается в том, что для синхронизации используется мьютекс библиотеки QT, а для выполнения отложенных операций - цикл обработки событий QT, т.е. отложенные операции синхронизированы со всеми событиями QT.

Дополнительные синхропространства не несут специальных функций. Дополнительному синхропространству соответствует класс Cntm::ExtraSynchroSpace.

Синхрообъекты

Синхрообъект, это объект, обладающий встроенными средствами синхронизации и использующий функции, предоставляемые синхропространством. Синхрообъект жестко связан со своим синхропространством. Объект принадлежит определенному синхропространству, которое указывается при создании объекта. Передача объекта другому синхропространству запрещена. Подробное описание функций синхрообъекта приведено в Cntm::SynchroObject, который является базой для синхрообъектов.

Синхрообъект является ссылочным объектом. Чтобы определить свой класс синхрообъекта его нужно унаследовать от одного из 3 классов: Cntm::SynchroRefBase, Cntm::SynchroRefBaseEx и Cntm::SynchroAggregatedBase. Эти классы объединяют соответствующий способ подсчета ссылок и средства синхронизации, предоставляемые Cntm::SynchroObject. Особенностью классов Cntm::SynchroRefBase и Cntm::SynchroRefBaseEx является то, что гарантируется отложенный вызов их деструкторов и метода OnReleaseInstance() для Cntm::SynchroRefBaseEx.

Особенности использования

Точки входа и выхода из синхропространства задаются вызовами методов Enter() и Leave() соответственно. Существует альтернативный способ входа и выхода - с помощью scoped-объектов. В конструкторе scoped-объекта происходит вход, а в деструкторе - выход. Классы, реализующие эту функциональность - Cntm::Sync и Cntm::ReentrantSync.

Отложенные операции (точнее, отложенные синхрозадачи) редко используются напрямую, обычно применяются средства, основанные на отложенных операциях. К этим средствам относятся отложенные события и отложенные асинхронные процедуры. Также отложенные операции используются и при уничтожении самих синхрообъектов.


Классы

class  Cntm::ExtraSynchroSpace
 Класс дополнительного синхропространства. Подробнее...
class  Cntm::IBasicSynchro
 Данный класс является базовым для классов синхропространств и сихрообъектов и определяет способы входа в синхропространство. Подробнее...
class  Cntm::LoopInNoMainThreadException
 Исключение, генерируемое при попытке запуска цикла обработки сообщений не из главного потока (в QT такой запуск запрещен). Подробнее...
class  Cntm::MainSynchroSpace
 Класс главного синхропространства. Подробнее...
class  Cntm::MainSynchroSpace::Application
 Класс приложения. Подробнее...
class  Cntm::NoReentrantModeException
 Исключение, генерируемое при попытке реентерабельного входа в синхропространство в не REENTRANT режиме. Подробнее...
class  Cntm::QTMainSynchroSpace
 Класс главного синхропространства, использующего средства библиотеки QT для реализации функций главного синхропространства. Подробнее...
class  Cntm::QTMainSynchroSpace::Application
 Класс QT приложения. Подробнее...
class  Cntm::SynchroAggregatedBase
 Базовый класс для синхрообъектов. Подробнее...
class  Cntm::SynchroObject
 Базовый класс для синхрообъектов. Подробнее...
class  Cntm::SynchroRefBase
 Базовый класс для синхрообъектов. Подробнее...
class  Cntm::SynchroRefBaseEx
 Базовый класс для синхрообъектов. Подробнее...
class  Cntm::SynchroSpace
 Класс Cntm::SynchroSpace - базовый класс для синхропространств. Подробнее...


SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3