`std :: future :: then`会分é…内存å—?自定义分é…器å¯èƒ½å—?

时间:2017-11-08 14:57:03

标签: c++ future executor

std::promise有constructor,用于分é…用于存储共享状æ€çš„内存。在我到目å‰ä¸ºæ­¢çœ‹åˆ°çš„.then的实现中,一个以类型擦除方å¼å­˜å‚¨å‡½æ•°ï¼Œç±»ä¼¼äºŽå…±äº«çŠ¶æ€ä¸­çš„std::function 。 stlabçš„Concurrency库甚至å¯ä»¥æ”¾ä¸€ä¸ª

using then_t = std::vector<std::pair<executor_t, task<void()>>>;

进入共享状æ€ï¼ˆå¯ç”¨å¯æ‹†åˆ†æœŸè´§ï¼‰ã€‚

是å¦æœ‰æ„指定是å¦å¯ä»¥ä¸ºå»¶æœŸæŒ‡å®šåˆ†é…器?

在P0443R3中他们在1.2.9属性中说自定义内存分é…

  

执行程åºå®žçŽ°åº”使用æ供的分é…å™¨è¿›è¡Œåˆ†é… Â Â å­˜å‚¨æ交的函数对象所需的任何内存。

我认为这仅表示通过execute函数æ交的代ç†çš„存储,而ä¸æ˜¯ std::future共享状æ€ä¸­æŒ‡é’ˆçš„存储。

我查看了最近的期货或执行人æ案,我找ä¸åˆ°ä»»ä½•ä¸œè¥¿ã€‚最近的论文似乎倾å‘于将执行者置于未æ¥çš„共享状æ€ã€‚如果执行者有一个关è”的自定义分é…器,是å¦åº”该使用它?

我觉得我错过了什么。

-

编辑:我更多地想到这一点,我想我å¯ä»¥ç†è§£ä¸ºä»€ä¹ˆäººä»¬æƒ³è¦ç•™ä¸‹è¿™ä¸ªæœªæŒ‡æ˜Žçš„内容。如果期货由执行者进行å‚​​数化,那么它们的共享状æ€å¯èƒ½çœ‹èµ·æ¥åƒè¿™æ ·

template <typename Executor, typename T>
struct shared_state_t {
    // some prevention from race condition, for example
    std::atomic<unsigned> flags;
    // some sort of exception or value representation, for example
    std::variant<std::exception_ptr, T> maybe_value;
    // some handle to continuation
    continuation_t<Executor, T> continuation;
};

其中continuation_t<Executor, T>ä¸éœ€è¦åˆ†é…内存。它å¯ä»¥æ˜¯æŒ‡å‘一个执行者Executor的内部执行代ç†çš„指针,或者是std::function<void(T&&)>çš„å¦ä¸€ä¸ªæ‰§è¡Œè€…的指针。

0 个答案:

没有答案