Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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++ 活动对象-实现问题_C++_Design Patterns - Fatal编程技术网

C++ 活动对象-实现问题

C++ 活动对象-实现问题,c++,design-patterns,C++,Design Patterns,我正在努力实施。 在所有示例实现中,ActivationQueue正在同步对消息队列的访问。我在想为什么在这门课上这么做。 为什么计划程序未同步对ActivationQueue的访问。它是唯一访问此ActivationQueue对象的对象。这里的同步可以非常简单。 问题是-在调度程序或ActivationQueue本身中,同步对ActivationQueue的访问的更好位置是什么 谢谢在Lavender和Schmidt最初的方法中,只有调度器访问队列,而在队列中实现同步是更好的选择,这一点您是对

我正在努力实施。 在所有示例实现中,ActivationQueue正在同步对消息队列的访问。我在想为什么在这门课上这么做。 为什么计划程序未同步对ActivationQueue的访问。它是唯一访问此ActivationQueue对象的对象。这里的同步可以非常简单。 问题是-在调度程序或ActivationQueue本身中,同步对ActivationQueue的访问的更好位置是什么


谢谢

在Lavender和Schmidt最初的方法中,只有调度器访问队列,而在队列中实现同步是更好的选择,这一点您是对的。 原因有两个:

  • 由于问题(可能的不一致性)及其解决方案(同步)的界限更好,因此对受保护对象进行同步是一种更清晰的设计
  • AO有一些实现,其中请求直接调度到队列(由外部实体),调度器“仅”决定重新排序
    在QP/C++活动对象框架()中,这样做更简单。每个活动对象都拥有自己的事件队列,只要该队列为空,该队列就会阻止活动对象线程。将事件发布到活动对象队列时,队列将取消阻止。如果以这种方式解除了多个活动对象的阻塞,则调度将留给底层多任务内核。这意味着活动对象可以自由地相互抢占,这取决于分配给活动对象线程的优先级。这种方法干净、简单,并且正是UML规范建议在活动对象中处理RTC(从运行到完成)处理的方式。有关特定的实现,请参阅P-thread版本或上的Win32版本)