Примером однофазной операции является отсылка не отложенного и не периодического сообщения: ядро захватывается; пока оно захвачено выполняются все необходимые действия; после освобождения ядра информация из системного словаря либо уже не используется, либо уже защищента счетчиками ссылок.
Примером многофазной операции является регистрация кооперации: ядро захватывается; пока оно захвачено выполняется только часть необходимых действий; после разблокирования ядра в остальных действиях используется информация из системного словаря, которая не защищена счетчиками ссылок. Исчезновение этой информации приведет к краху приложения.
Отсылка периодического и/или отложенного сообщения является многофазной операцией, т.к. перед обращением к таймерной нити ядро должно быть разблокированно.
Задача синхронизации доступа к ядру SObjectizer заключается в том, чтобы запретить операцию shutdown и очистку системного словаря пока выполняются многофазные операции.
Для выполнения этой задачи в ядре SObjectizer используются:
Принцип работы однофазных операций следующий:
Принцип работы многофазных операций следующий:
Принцип работы метода kernel_t::shutdown:
Для упрощения блокировок ядра в однофазных операциях предназначен тип one_phase_operation_lock_t. Для упрощения блокировок ядра в многофазных операциях предназначен тип multi_phase_operation_lock_t.
Метод kernel_t::is_running() возвращает true только, если текущее состояние running.
Для получения текущего состояния ядра необходимо использовать конструкцию
kernel().state().current();
Открытые члены | |
sys_dict_t & | dict () |
const sys_dict_t & | dict () const |
bool | is_running () const |
state_t & | state () |
Доступ к состоянию ядра. | |
const state_t & | state () const |
Доступ к состоянию ядра. | |
sobjectizer_settings_t & | sobjectizer_settings () |
Доступ к глобальным параметрам SObjectizer. | |
void | run (dispatcher_t *disp) |
locks_t & | locks () |
Получение доступа к собранию семафоров и других вспомогательных объектов, которые необходимы при выполнении операций над ядром. | |
Открытые статические члены | |
static void | shutdown () |
Статические открытые данные | |
static so_4::rt::dispatcher_t * | m_disp |
Закрытые данные | |
state_t | m_state |
Текущее состояние ядра. | |
std::auto_ptr< sys_dict_t > | m_dict |
Используемый ядром системный словарь. | |
sobjectizer_settings_t | m_sobjectizer_settings |
Глобальные параметры SObjectizer. | |
std::auto_ptr< locks_t > | m_locks |
Вспомогательные объекты синхронизации, которые необходимы при работе с ядром. | |
Друзья | |
class | one_phase_operation_lock_t |
class | multi_phase_operation_lock_t |
Классы | |
struct | locks_t |
Класс, который будет содержать в себе все семафоры и другие вспомогательные объекты, которые необходимы при выполнении операций над ядром. Подробнее... | |
class | multi_phase_operation_lock_t |
Класс для блокировки ядра на время выполнения многофазной операции. Подробнее... | |
class | one_phase_operation_lock_t |
Класс для блокировки ядра на время выполнения однофазной операции. Подробнее... | |
class | state_t |
Объект, отвечающий за хранение и изменение текущего состояни ядра SObjectizer. Подробнее... |
kernel_t::state_t & so_4::rt::impl::kernel_t::state | ( | ) |
Доступ к состоянию ядра.
Перекрестные ссылки m_state.
Используется в shutdown().
const kernel_t::state_t & so_4::rt::impl::kernel_t::state | ( | ) | const |
sobjectizer_settings_t & so_4::rt::impl::kernel_t::sobjectizer_settings | ( | ) |
Доступ к глобальным параметрам SObjectizer.
Перекрестные ссылки m_sobjectizer_settings.
void so_4::rt::impl::kernel_t::shutdown | ( | ) | [static] |
В этом методе ядро блокируется в режиме read-write, поэтому этот метод нельзя вызывать из заблокированного ядра.
Перекрестные ссылки so_4::rt::impl::sys_dict_t::cleanup(), so_4::rt::impl::sys_dict_t::destroy_coops(), dict(), so_4::rt::impl::kernel_t::one_phase_operation_lock_t::kernel(), locks(), so_4::rt::impl::kernel_t::locks_t::m_multi_phase_operation_counter, state(), so_4::rt::impl::kernel_t::state_t::switch_to_kernel_shutting_down() и so_4::rt::impl::kernel_t::one_phase_operation_lock_t::wait_for_shutdown_possibility().
kernel_t::locks_t & so_4::rt::impl::kernel_t::locks | ( | ) |
Получение доступа к собранию семафоров и других вспомогательных объектов, которые необходимы при выполнении операций над ядром.
Перекрестные ссылки m_locks.
Используется в so_4::rt::impl::kernel_locks() и shutdown().
state_t so_4::rt::impl::kernel_t::m_state [private] |
std::auto_ptr< locks_t > so_4::rt::impl::kernel_t::m_locks [private] |
Вспомогательные объекты синхронизации, которые необходимы при работе с ядром.
Используется в locks().
Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:49 2008. Создано системой 1.5.6 |