ACE反应器计时器管理线程安全吗?

时间:2010-01-18 21:12:55

标签: c++ multithreading ace

我有一个管理定时器的模块。这个课程有三个功能:

ACE_Reactor的实例在模块内部用于管理计时器。

  • schedule timer - 调用ACE_Reactor :: schedule_timer()。 其中一个参数是回调,称为计时器延期。
  • 取消计时器 - 调用ACE_Reactor :: cancel_timer()

反应器在执行的私有定时器中执行,因此调度/取消和超时回调在不同的线程中执行。

ACE_Reactor::schedule_timer()收到堆分配结构( arg 参数)。

此结构稍后在取消计时器或调用超时处理程序时删除。 但是由于取消和超时处理程序在不同的线程中执行,所以看起来有结构被删除两次的情况。

在调用超时处理程序时,是否有责任确保取消定时器?

1 个答案:

答案 0 :(得分:0)

AFAIK这种情况绝对可以通过ACE_TP_Reactor来实现。使用TP反应器,超时不会在同一个线程上同步。即当您在某个其他线程中执行handle_input时,可能会发生超时。您必须同步事件。一种干净的方法是调整ACE_Event_Handler接口以进行同步。