我正在尝试实施Active Object pattern。 在所有示例实现中,ActivationQueue正在同步对消息队列的访问。我在想为什么在这堂课里完成。 为什么Scheduler没有同步对ActivationQueue的访问。它是访问此ActivationQueue对象的唯一对象。这里的同步非常简单。 问题是 - 在调度程序或ActivationQueue本身内同步访问ActivationQueue的更好的地方是什么?
谢谢
答案 0 :(得分:0)
虽然你认为在Lavender和Schmidt的原始方法中只有调度程序访问队列是正确的,但是在队列中实现同步是更好的选择。 有两个原因:
答案 1 :(得分:0)
在QP / C ++活动对象框架(http://www.state-machine.com/qp)中,这样做更简单。每个活动对象拥有自己的事件队列,只要它是空的,该队列就会阻塞活动对象线程。将事件发布到活动对象队列时,队列将解除阻止。如果以这种方式解除阻塞多个活动对象,则将调度留给底层多任务内核。这意味着活动对象可以自由地相互抢占,具体取决于分配给活动对象的线程的优先级。这种方法简洁明了,而且UML规范建议如何处理活动对象中的RTC(运行到完成)处理。有关具体实现,请参阅http://www.state-machine.com/linux/处的P线程版本http://www.state-machine.com/win32或Win32版本。)