2013-04-22 40 views
0

我正在嘗試執行Active Object pattern。 在所有示例實現中,ActivationQueue正在同步對消息隊列的訪問。我在想這是爲什麼在這個班級內完成的。 爲什麼調度程序不能同步對ActivationQueue的訪問。它是訪問此ActivationQueue對象的唯一對象。同步在這裏可以非常簡單。 問題是 - 在計劃程序或ActivationQueue本身內,同步訪問ActivationQueue的更好位置是什麼?主動對象 - 執行問題

謝謝

回答

0

雖然你是正確的,由薰衣草和施密特原來的做法只能調度訪問隊列,這是一個更好的choise實現隊列同步。 有兩個原因:

  1. 這是一個清晰的設計synchonize受保護的對象,因爲這個問題(可能不一致)及其soulution(同步)是更好的結合。
  2. 有一些AO的實現,其中請求被直接調度到隊列(由外部實體),並且調度器「僅」決定重新排序。
0

在QP/C++主動對象框架(http://www.state-machine.com/qp)中,這樣做甚至更簡單。每個活動對象擁有自己的事件隊列,並且只要該隊列爲空,該隊列就會阻塞活動對象線程。當事件發佈到活動對象隊列時,隊列將被取消阻止。如果幾個活動對象以這種方式被解除阻塞,則調度將留給底層的多任務內核。這意味着活動對象可以根據分配給活動對象線程的優先級自由地搶佔對方。這種方法很乾淨,簡單,而且UML規範建議如何處理活動對象中的RTC(運行到完成)處理。有關具體實現,請參閱P線程版本http://www.state-machine.com/linux/或Win32版本http://www.state-machine.com/win32)。