yyzybb537 / libgo

Go-style concurrency in C++11
MIT License
3.22k stars 758 forks source link

可以动态添加协程吗 #221

Open dreamyphone opened 4 years ago

dreamyphone commented 4 years ago

如果事先并不知道有多少个协程,运行过程中可以动态添加协程吗? 在sample2_yield.cpp 中尝试把co_sched.Start() 方法移动到最前面,结果就运行不起来了。 请问这部分应该怎么操作呢?

yyzybb537 commented 4 years ago

co_sched.goStart()

sunny-shu commented 4 years ago

看一下void Scheduler::Start的代码最后一行mainProc->Process(); 这个方法是死循环去处理提交给它的协程。所以Start方法不会退出。

要想继续添加协程,只能将co_sched.Start() 放在其他线程中运行。 比如sample1中的std::thread t([]{ co_sched.Start(); });

作者也封装成了co_sched.goStart()