Класс so_4::rt::impl::kernel_t

Полный список членов класса


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

Класс для хранения всей относящийся к ядру SObj информации и синхронизации доступа к ней.

Принципы синхронизации ядра SObjectizer (начиная с 4.4.0-b6)
Операции над ядром SObjectizer можно разделить на однофазные и многофазные.

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

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

Отсылка периодического и/или отложенного сообщения является многофазной операцией, т.к. перед обращением к таймерной нити ядро должно быть разблокированно.

Задача синхронизации доступа к ядру SObjectizer заключается в том, чтобы запретить операцию shutdown и очистку системного словаря пока выполняются многофазные операции.

Для выполнения этой задачи в ядре SObjectizer используются:

Принцип работы однофазных операций следующий:

Принцип работы многофазных операций следующий:

Принцип работы метода kernel_t::shutdown:

Для упрощения блокировок ядра в однофазных операциях предназначен тип one_phase_operation_lock_t. Для упрощения блокировок ядра в многофазных операциях предназначен тип multi_phase_operation_lock_t.

Состояния объекта ядра SObjectizer
В версии 4.4.0 после перехода на таймер из ACE была обнаружена проблема с тупиковой ситуацией, когда какая-нибудь таймерная заявка срабатывала в момент остановки диспетчера. Для ее устранения было увеличено число состояний, в которых может находится ядро SObjectizer:

Метод kernel_t::is_running() возвращает true только, если текущее состояние running.

Для получения текущего состояния ядра необходимо использовать конструкцию

  kernel().state().current();
Для смены состояния необходимо вызывать соответствующие методы у объекта kernel_t::state_t, возвращаемого методом kernel_t::state().

Открытые члены

sys_dict_tdict ()
const sys_dict_tdict () const
bool is_running () const
state_tstate ()
 Доступ к состоянию ядра.
const state_tstate () const
 Доступ к состоянию ядра.
sobjectizer_settings_tsobjectizer_settings ()
 Доступ к глобальным параметрам SObjectizer.
void run (dispatcher_t *disp)
locks_tlocks ()
 Получение доступа к собранию семафоров и других вспомогательных объектов, которые необходимы при выполнении операций над ядром.

Открытые статические члены

static void shutdown ()

Статические открытые данные

static so_4::rt::dispatcher_tm_disp

Закрытые данные

state_t m_state
 Текущее состояние ядра.
std::auto_ptr< sys_dict_tm_dict
 Используемый ядром системный словарь.
sobjectizer_settings_t m_sobjectizer_settings
 Глобальные параметры SObjectizer.
std::auto_ptr< locks_tm_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 (  ) 

Доступ к состоянию ядра.

Начиная с:
v.4.4.0-b3-p2

Перекрестные ссылки m_state.

Используется в shutdown().

const kernel_t::state_t & so_4::rt::impl::kernel_t::state (  )  const

Доступ к состоянию ядра.

Начиная с:
v.4.4.0-b3-p2

Перекрестные ссылки m_state.

sobjectizer_settings_t & so_4::rt::impl::kernel_t::sobjectizer_settings (  ) 

Доступ к глобальным параметрам SObjectizer.

Начиная с:
v.4.4.0-b6

Перекрестные ссылки 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 (  ) 

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

Начиная с:
v.4.4.0-b6

Перекрестные ссылки m_locks.

Используется в so_4::rt::impl::kernel_locks() и shutdown().


Данные класса

Текущее состояние ядра.

Начиная с:
v.4.4.0-b3-p2

Используется в state().

Глобальные параметры SObjectizer.

Начиная с:
v.4.4.0-b6

Используется в sobjectizer_settings().

std::auto_ptr< locks_t > so_4::rt::impl::kernel_t::m_locks [private]

Вспомогательные объекты синхронизации, которые необходимы при работе с ядром.

Начиная с:
v.4.4.0-b6

Используется в locks().


Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:49 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo