Synchro.h

См. документацию.
00001 /*
00002  * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события
00003  * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru
00004  * _______________________________________________________________________________
00005  * Разрешено свободное использование, копирование, распространение, изменение
00006  * (изменение сведений об авторских правах запрещено). Запрещена продажа и 
00007  * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об
00008  * авторских правах на программу (или сведениях о программе, об авторах, 
00009  * использованных средствах разработки и т.д.) должна быть указана информация
00010  * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е.
00011  * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора.
00012  */ 
00013 
00014 /**
00015  * \defgroup Synchro Cntm.Synchro
00016  * Пакет предоставляет базовые средства, упорядочивающие взаимодействие различных компонентов системы. К этим средствам относятся такие понятия, как синхропространства, синхрообъекты, отложенные операции. Эти средства являются фундаментом, обеспечивающим надежное взаимодействие компонентов в многопоточных системах, предоставляющим механизмы, которые сводят к минимуму влияние поведения одного компонента на другой при их взаимодействии. Все средства, предосталяемые этим пакетом, используют подсчет ссылок.
00017  * 
00018  * <H2>Синхропространства</H2>
00019  * 
00020  * <H3>Понятие синхропространства</H3>
00021  * 
00022  * Пакет предоставляет механизм, обеспечивающий синхронизацию потоков и выполнение отложенных (сериализованных) операций. Этот механизм называется синхропространством.
00023  * 
00024  * С точки зрения синхронизации синхропространство можно представить как мьютекс, который может быть захвачен только одним потоком выполнения. Процесс захвата мьютекса будем называть входом в синхропространство. Внутри синхропространства может находиться только один поток выполнения, остальные будут ожидать его выхода на точке входа в синхропространство.
00025  * 
00026  * Выполнение отложенных операций происходит следующим образом. Инициатор готовит задание тем или иным способом (о способах ниже), помещенает в очередь синхропространства. Синхропространство в определенный момент времени запускает операцию на выполнение внутри синхропространства, т.е. синхронизированно со всем другими потоками выполнения. После завершения выполнения выполнения операция удаляется из очереди.
00027  * 
00028  * В программе м.б. несколько синхропространств. Синхропространству соответствует класс Cntm::SynchroSpace. Более детальное описание функций синхропространства приведено в документации по классу Cntm::SynchroSpace.
00029  * 
00030  * <H3>Типы синхропространств</H3>
00031  * 
00032  * Синхропространства делятся на 2 типа: главные и дополнительные. В программе м.б. только одно главновное синхропространство и несколько дополнительных.
00033  * 
00034  * Главные синхропространства помимо перечисленных решают еще одну задачу - обеспечение жизненного цикла системы. Это означает, что в главном потоке запускается цикл работы системы (обычно это цикл обработки сообщений), выход из которого означает завершение работы системы. Обеспечение жизненного цикла, в частности, означает и то, что система не завершит свою работу, пока существует хотя бы один объект, использующий функции синхропространств (такие объекты называются синхрообъектами и будут рассмотрены ниже).
00035  * 
00036  * Главные синхропространства могут сами полностью реализовывать свои функции либо интегрироваться с другими библиотеками, предоставляющими подобную функциональность (на данный момент реализована интеграция с библиотекой QT). Главному синхропространству, которое само реализует все функции, соответствует класс Cntm::MainSynchroSpace. Для интеграции с QT следует использовать класс Cntm::QTMainSynchroSpace. Интеграция заключается в том, что для синхронизации используется мьютекс библиотеки QT, а для выполнения отложенных операций - цикл обработки событий QT, т.е. отложенные операции синхронизированы со всеми событиями QT.
00037  * 
00038  * Дополнительные синхропространства не несут специальных функций. Дополнительному синхропространству соответствует класс Cntm::ExtraSynchroSpace.
00039  * 
00040  * <H2>Синхрообъекты</H2>
00041  * 
00042  * Синхрообъект, это объект, обладающий встроенными средствами синхронизации и использующий функции, предоставляемые синхропространством. Синхрообъект жестко связан со своим синхропространством. Объект принадлежит определенному синхропространству, которое указывается при создании объекта. Передача объекта другому синхропространству запрещена. Подробное описание функций синхрообъекта приведено в Cntm::SynchroObject, который является базой для синхрообъектов.
00043  * 
00044  * Синхрообъект является ссылочным объектом. Чтобы определить свой класс синхрообъекта его нужно унаследовать от одного из 3 классов: Cntm::SynchroRefBase, Cntm::SynchroRefBaseEx и Cntm::SynchroAggregatedBase. Эти классы объединяют соответствующий способ подсчета ссылок и средства синхронизации, предоставляемые Cntm::SynchroObject. Особенностью классов Cntm::SynchroRefBase и Cntm::SynchroRefBaseEx является то, что гарантируется отложенный вызов их деструкторов и метода OnReleaseInstance() для Cntm::SynchroRefBaseEx.
00045  * 
00046  * <H2>Особенности использования</H2>
00047  * 
00048  * Точки входа и выхода из синхропространства задаются вызовами методов Enter() и Leave() соответственно. Существует альтернативный способ входа и выхода - с помощью scoped-объектов. В конструкторе scoped-объекта происходит вход, а в деструкторе - выход. Классы, реализующие эту функциональность - Cntm::Sync и Cntm::ReentrantSync.
00049  * 
00050  * Отложенные операции (точнее, отложенные синхрозадачи) редко используются напрямую, обычно применяются средства, основанные на отложенных операциях. К этим средствам относятся отложенные события и отложенные асинхронные процедуры. Также отложенные операции используются и при уничтожении самих синхрообъектов.
00051  */
00052 
00053 #include <Cntm/Synchro/IBasicSynchro.h>
00054 #include <Cntm/Synchro/SynchroObject.h>
00055 #include <Cntm/Synchro/SynchroRefBase.h>
00056 #include <Cntm/Synchro/SynchroRefBaseEx.h>
00057 #include <Cntm/Synchro/SynchroAggregatedBase.h>
00058 #include <Cntm/Synchro/SynchroSpace.h>
00059 #include <Cntm/Synchro/MainSynchroSpace.h>
00060 #include <Cntm/Synchro/QTMainSynchroSpace.h>
00061 #include <Cntm/Synchro/ExtraSynchroSpace.h>
00062 #include <Cntm/Synchro/LoopInNoMainThreadException.h>
00063 #include <Cntm/Synchro/NoReentrantModeException.h>
00064 #include <Cntm/Synchro/SyncScopes/Sync.h>
00065 #include <Cntm/Synchro/SyncScopes/ReentrantSync.h>

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