C++ lectures at MIPT (in Russian). Lecture 11. Asynchronous programming, part 2

Поділитися
Вставка
  • Опубліковано 15 лис 2024

КОМЕНТАРІ • 7

  • @rodionmontsarj5296
    @rodionmontsarj5296 2 роки тому

    Константин, ещё раз огромное спасибо за лекции. На слайде 41 (9:30) я пологаю должно быть co_return f вместо co_return f.get()

  • @DART2WADER
    @DART2WADER 4 роки тому

    Можно хитрее подождать:
    #include
    #include
    auto operator co_await(std::chrono::system_clock::duration duration){
    class awaiter {
    static void CALLBACK TimerCallback(PTP_CALLBACK_INSTANCE, void* Context, PTP_TIMER) {
    std::experimental::coroutine_handle::from_address(Context)();
    }

    PTP_TIMER timer = nullptr;

    std::chrono::system_clock::duration duration;
    public:
    explicit awaiter(std::chrono::system_clock::duration duration) : duration(duration) { }

    ~awaiter() { if (timer) CloseThreadpoolTimer(timer); }

    bool await_ready() const { return duration.count()

  • @vasilystarostin4697
    @vasilystarostin4697 2 роки тому

    Вопрос. Чтобы решить проблему с медленным my_reduce, вы предлагаете добавить локальную переменную в цикл for (время 1:12:43). Но ведь локальная переменная будет удалена после каждой итерации for. Разве можно отдавать ссылку на нее в std:thread?

  • @coudam
    @coudam 4 роки тому

    У меня вопрос по 51 первому слайду лекции, а точнее, я не понимаю как co_await std::future себя ведет после вызова. Как именно std::future реализует интерфейс awaitable? Как и когда он передает управление обратно в compute

    • @tilir
      @tilir  4 роки тому +3

      Я хотел бы ответить на этот вопрос со ссылкой на стандарт, но увы, в C++20 это, похоже, не регламентировано и речь о частной инициативе MS. В итоге в том же кланге этот пример скажет, что нет coroutine_traits для future.
      MS: godbolt.org/z/8VVdRH
      clang: godbolt.org/z/towgez
      Впрочем доопределить эти traits можно и самостоятельно.
      Основная идея реализации awaitable для MS вероятно изложена здесь: kirkshoop.github.io/async/rxcpp/await/c++/2015/03/13/await-in-c++-await-the-future.html
      Обратите внимание, сделать future валидным типом для корутины это идея Нишанова начиная с 2015-го и я был уверен, что в стандарт это протащили.
      Ну значит протащат =)

    • @coudam
      @coudam 4 роки тому

      @@tilir Большое спасибо за пояснение! Пока жду релиз стандарта попробую написать обертку над future (на кланге) чтобы заработал пример с MS)

    • @tilir
      @tilir  4 роки тому

      @@coudam так есть же несколько. Например task в cppcoro и т.п.