2010-06-06 21 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上,我意识到我需要做什么。非常类似于那里做了什么,所以我将保存关于我如何做的冗长的回应。