2010-06-06 20 views
2

我正在研究在Grand Central Dispatch(特別是C級API libdispatch)上實現actor模型的庫。基本上我的系統的簡要概述是這樣:通過使用消息參與者之間使用Apple的GCD創建期貨

  • 通信發生
  • 組播通信只(一個演員的許多行爲者)
  • 發送者和接收者彼此使用黑板解耦消息被推送到哪裏。
  • 一旦消息被推送到黑板上,使用dispatch_group_async()異步發送消息在默認隊列中。

我試圖在語言來實現期貨的權利,所以我創建了一個新的類型,其持有的一些信息:

  • 一組自己的
  • 的價值被'返回'

但是,我有一個問題,因爲dispatch_block_t是void(^)(void)類型,所以它不返回任何東西。所以我的想法在我的future_new()函數中設置另一個可用於執行返回結果的塊的組,該結果可存儲在我的future_t結構中的「值」成員中,但不起作用。

其餘的期貨實施非常明確,除非它能夠根據消息對演員的未來價值進行回報。

當使用該庫時,如果我不得不要求用戶(和我自己)知道系統的其他部分將使用未來時,它會大大降低它的用處 - 這是不實際的。

我想知道是否有人可以想辦法解決這個問題?

回答

0

實際上有Mike Ash's implementation向我指出,一旦我看到他的initWithBlock:在MAFuture上,我意識到我需要做什麼。非常類似於那裏做了什麼,所以我將保存關於我如何做的冗長的迴應。