我正在研究在Grand Central Dispatch(特別是C級API libdispatch)上實現actor模型的庫。基本上我的系統的簡要概述是這樣:通過使用消息參與者之間使用Apple的GCD創建期貨
- 通信發生
- 組播通信只(一個演員的許多行爲者)
- 發送者和接收者彼此使用黑板解耦消息被推送到哪裏。
- 一旦消息被推送到黑板上,使用dispatch_group_async()異步發送消息在默認隊列中。
我試圖在語言來實現期貨的權利,所以我創建了一個新的類型,其持有的一些信息:
- 一組自己的
- 的價值被'返回'
但是,我有一個問題,因爲dispatch_block_t是void(^)(void)類型,所以它不返回任何東西。所以我的想法在我的future_new()函數中設置另一個可用於執行返回結果的塊的組,該結果可存儲在我的future_t結構中的「值」成員中,但不起作用。
其餘的期貨實施非常明確,除非它能夠根據消息對演員的未來價值進行回報。
當使用該庫時,如果我不得不要求用戶(和我自己)知道系統的其他部分將使用未來時,它會大大降低它的用處 - 這是不實際的。
我想知道是否有人可以想辦法解決這個問題?