CppCoroutines icon indicating copy to clipboard operation
CppCoroutines copied to clipboard

eager start调度协程和resume时机的问题

Open AllCombo opened this issue 1 year ago • 0 comments

一. 在initial_suspend挂起点DispatchAwaiter 是eager start 如果在DispatchAwaiter分发到另一个线程启动会遇到问题 比如主线程创建{ Task task = CreateTask();} 又立即析构task, raii里h.destroy(), 此时task在另一个线程运行可能不处于suspend状态,就UB了。

二. 如果是这样 { Task task = CreateTask(); task.get_result();}也好像依然有问题 按照cppreference co_return按以下顺序

  1. call promise.return_value(expr)
  2. destroys all variables with automatic storage duration in reverse order they were created.
  3. call promise.final_suspend()

在1. 里面激活条件变量主线程task.get_result被唤醒,然后析构task 从而h.destroy(),而调度器的线程的协程可能在做2和3,这里核心问题应该和第一点一样,h.destroy()调用时机必须是挂起状态 这种情况是应该在final_suspend搞个final_awaiter然后在这个awaiter里面做相关逻辑吗

AllCombo avatar Jul 18 '23 05:07 AllCombo