Безопасен ли поток управления таймера реактора ACE? - PullRequest
0 голосов
/ 19 января 2010

У меня есть модуль, который управляет таймерами в моем приложении.Этот класс имеет три основных функции:

Экземпляр ACE_Reactor используется внутренне модулем для управления таймерами.

  • timer timer - вызывает ACE_Reactor :: schedule_timer ().Одним из аргументов является обратный вызов, который вызывается при срабатывании таймера.
  • отменять таймер - вызывает ACE_Reactor :: cancel_timer ()

Реактор, выполняемый в частном таймере выполнения, поэтому планируйте /Отмена и обратный вызов тайм-аута выполняются в разных потоках.

ACE_Reactor :: schedule_timer () получает структуру allocatec кучи ( arg аргумент).

Эта структура впоследствии удаляется при отмене таймера или по истечении времени ожиданияобработчик называется.Но поскольку обработчик отмены и тайм-аута выполняется в разных потоках, похоже, что есть случаи, когда структура удаляется дважды.

Разве не реактор отвечает за то, чтобы таймер был отменен при вызове обработчика тайм-аута?

1 Ответ

0 голосов
/ 20 января 2010

AFAIK такой случай определенно возможен с ACE_TP_Reactor. При использовании TP-реактора тайм-ауты не синхронизируются в одном потоке. То есть тайм-аут может произойти, когда вы находитесь в процессе выполнения handle_input в каком-то другом потоке. Вам нужно будет синхронизировать события. Чистый способ сделать это - адаптировать интерфейс ACE_Event_Handler для синхронизации.

...