使用Apple的GCD创造未来

时间:2010-06-06 15:28:39

标签: c concurrency asynchronous macos objective-c

我正在开发一个在Grand Central Dispatch(特别是C级API libdispatch)上实现actor模型的库。基本上我的系统的简要概述是这样的:

  • 使用消息的演员之间进行通信
  • 仅限多播通信(一个演员到多个演员)
  • 发件人和收件人使用黑板将消息推送到彼此。
  • 消息被推送到黑板后,使用dispatch_group_async()以异步方式在默认队列中发送消息。

我正在尝试用语言实现期货,所以我创建了一个包含一些信息的新类型:

  • 一组自己的
  • '返回'的值

但是,我有一个问题,因为dispatch_block_t的类型为void(^)(void),因此它不会返回任何内容。所以我想在我的future_new()函数中设置另一个可用于执行返回结果的块的组,我可以将它存储在我的future_t结构中的“value”成员中,但这样做不会起作用。 / p>

期货实施的其余部分非常明确,除非它取决于能否从行动者那里获得未来的价值,并根据信息采取行动。

当使用该库时,如果我不得不要求用户(和我自己)知道系统其他部分将要使用期货时,它会大大降低其实用性 - 这是不切实际的。

我想知道是否有人可以想办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

实际上有Mike Ash's implementation向我指出,一看到他的initWithBlock:在MAFuture上,我意识到我需要做什么。非常类似于那里所做的,所以我将保存关于我如何做的冗长的回应。