【问题标题】:Is ACE reactor timer managment thread safe?ACE reactor 定时器管理线程安全吗?
【发布时间】:2010-01-18 21:12:54
【问题描述】:

我有一个模块来管理我的应用程序中的计时器。这个类基本上有三个功能:

ACE_Reactor 的实例被模块内部用于管理定时器。

  • 调度计时器 - 调用 ACE_Reactor::schedule_timer()。 其中一个参数是一个回调,在计时器到期时调用。
  • 取消计时器 - 调用 ACE_Reactor::cancel_timer()

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

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

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

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

【问题讨论】:

  • 你检查cancel_timer的结果吗?它还有助于获得有关管理堆分配结构删除的方式的更多信息。是否在处理程序的handle_close 方法中删除?

标签: c++ multithreading ace


【解决方案1】:

ACE_TP_Reactor 绝对有可能发生这种情况。使用 TP-reactor,超时不会在同一个线程上同步。 IE。当您在其他线程中执行handle_input 时,可能会发生超时。您将必须同步事件。一个干净的方法是调整ACE_Event_Handler 接口以进行同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2018-09-08
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多