为什么c++中的测试库libunifex计算两次?

uinbv5nw  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(144)

这几天我一直在研究并尝试测试libunifex的能力,但我发现它并不像我预期的那样工作。

#include <unifex/sync_wait.hpp>
#include <unifex/then.hpp>
#include <unifex/when_all.hpp>
#include <unifex/single_thread_context.hpp>

#include <iostream>

int main() {
    using namespace unifex;

    single_thread_context context;
    sender auto s0 = schedule(context.get_scheduler());
    sender auto s1 = then(s0, [](){
        std::cout << "do complex computation" << std::endl;
    });
    sender auto s21 = then(s1, [](){});
    sender auto s22 = then(s1, [](){});
    sync_wait(when_all(s21, s22));
}

在我的需求中,我在s1中做了一个复杂的计算,所以我期望复杂的计算只做一次,但是它做了两次复杂的计算,我有两个问题:

  1. paper是否支持我的要求(使s1计算一次)?(抱歉,本文对我来说有点复杂。)
    1.我发现分割功能在libunifex中还没有实现,这和我的需求有关系吗?
jogvjijk

jogvjijk1#

“复杂计算”之所以做了两次是因为你叫了它两次。第一次是在:

sender auto s21 = then(s1, [](){});

另一个是在:

sender auto s22 = then(s1, [](){});

相关问题