簡體   English   中英

如何實現單個消息的消息傳遞?

[英]How to implement message passing for a single message?

我已經實現了工作/任務系統。 您可以創建一個function<void, void>並將其放置在線程本地隊列中,然后再將該函數包裝在Fiber中。

現在,這可以正常工作,但是如果我不能返回值,那將毫無用處。 function<T, void>

這意味着我需要一種方法來傳遞消息。 我是這樣實現的:

我有一個Cell<T> ,它可以存儲變量並具有原子計數器。 我將一個function<T, void>封裝在一個閉包中。 一旦函數執行完畢,它將寫入cell並減少計數器。 現在,當我創建closure我必須指向一個單元格,一個在閉包內部,一個在外部。

閉包的類型為function<void, void> ,我還將其包裝在光纖中並將其放入線程本地隊列中。

現在,在任務系統之外,我可以檢查該單元格,如果計數器已減小到0。如果有,我知道task一定已經完成,否則必須等待。 我只在任務系統之外的主線程中等待。 在任務系統內部,我可以重新安排時間。

我之前沒有做過任何多用途編程,而這是我可以想象實現“消息傳遞”的唯一方法。

我很確定像Cell這樣的東西已經被發明了,但是我不確定它的通用名稱是什么。

這是實現消息傳遞的常用方法嗎? 我的意思是“在閉包中包裝一個cell然后等待完成”。

我的Cell的正確名稱是什么,在線上有任何可用的實現方式嗎?

有一種傳遞消息的方法,稱為“未來”。 “未來”是一個對象,它將在將來(因此)(因此而得名)中保存一個值,您可以對其進行輪詢(或等待)以獲取該值。 在C ++ 11中,它以std::future的形式存在。 未來的發射方是一個promise

對於您的情況:

  1. 有人給std::function<T()>安排執行
  2. 您將此功能包裝在光纖中。 在執行此操作時,實際上應該先將其包裝在std::function<void()>

     std::promise<T> promise; std::future<T> future = promise.get_future(); std::function<void()> wrapped = [f, p = std::move(promise)]() { p.set_value(f()); }; // do stuff with 'wrapped' return future; 
  3. 使用返回的future,您可以等待一個值(阻塞調用),也可以對其進行輪詢以了解何時完成該值。

獎勵:您還可以創建一個std::future<void> ,在這種情況下,您仍然可以調用get()或對其進行輪詢; 它會為完成功能發出信號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM