К этим средствам относятся такие понятия, как синхропространства, синхрообъекты, отложенные операции. Эти средства являются фундаментом, обеспечивающим надежное взаимодействие компонентов в многопоточных системах, предоставляющим механизмы, которые сводят к минимуму влияние поведения одного компонента на другой при их взаимодействии. Все средства, предосталяемые этим пакетом, используют подсчет ссылок.
Пакет предоставляет механизм, обеспечивающий синхронизацию потоков и выполнение отложенных (сериализованных) операций. Этот механизм называется синхропространством.
С точки зрения синхронизации синхропространство можно представить как мьютекс, который может быть захвачен только одним потоком выполнения. Процесс захвата мьютекса будем называть входом в синхропространство. Внутри синхропространства может находиться только один поток выполнения, остальные будут ожидать его выхода на точке входа в синхропространство.
Выполнение отложенных операций происходит следующим образом. Инициатор готовит задание тем или иным способом (о способах ниже), помещенает в очередь синхропространства. Синхропространство в определенный момент времени запускает операцию на выполнение внутри синхропространства, т.е. синхронизированно со всем другими потоками выполнения. После завершения выполнения выполнения операция удаляется из очереди.
В программе м.б. несколько синхропространств. Синхропространству соответствует класс 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 - базовый класс для синхропространств. Подробнее... |
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |