Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ACE反应器计时器管理线程是否安全?_C++_Multithreading_Ace - Fatal编程技术网

C++ ACE反应器计时器管理线程是否安全?

C++ ACE反应器计时器管理线程是否安全?,c++,multithreading,ace,C++,Multithreading,Ace,我的应用程序中有一个管理计时器的模块。该类基本上有三个功能: 模块内部使用ACE_Reactor实例来管理计时器 调度计时器-调用ACE_Reactor::调度计时器。 其中一个参数是回调,调用timer experation。 取消计时器-调用ACE_Reactor::取消计时器 反应器在执行的专用计时器中执行,因此调度/取消和超时回调在不同的线程中执行 接收堆allocatec结构参数 此结构稍后在取消计时器或调用超时处理程序时删除。 但由于cancel和timeout处理程序在不同的线程中

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

模块内部使用ACE_Reactor实例来管理计时器

调度计时器-调用ACE_Reactor::调度计时器。 其中一个参数是回调,调用timer experation。 取消计时器-调用ACE_Reactor::取消计时器 反应器在执行的专用计时器中执行,因此调度/取消和超时回调在不同的线程中执行

接收堆allocatec结构参数

此结构稍后在取消计时器或调用超时处理程序时删除。 但由于cancel和timeout处理程序在不同的线程中执行,因此在某些情况下,该结构会被删除两次


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

如果这样的情况在ACE\u TP\u反应堆中肯定是可能的。使用TP reactor,超时不会在同一线程上同步。也就是说,当您在其他线程中进行句柄输入时,可能会发生超时。您必须同步这些事件。一个干净的方法是调整ACE\U事件处理程序接口以进行同步。

是否检查取消计时器的结果?它还将有助于获得有关管理删除堆分配结构的方式的更多信息。它是否在处理程序的handle\u close方法中被删除?