libco icon indicating copy to clipboard operation
libco copied to clipboard

一个协程里创建一个协程并co_resume会发会什么后果?

Open wayland-chen opened this issue 8 years ago • 2 comments

例如: void fun(void *) { co_create(&co, null, fun, null); co_resume(co); }

int main(int argc, char** argvs) { stCoroutinue* co; co_create(&co, null, fun, null); co_resume(co); }

wayland-chen avatar Mar 08 '17 11:03 wayland-chen

按标题看不会怎么样,协程可以创建并co_resume另一个协程。 然而给的例子是递归的,会栈溢出而core dumped。 libco是非对称协程,因此你在协程A里面co_resume协程B,就相当于协程A调用协程B,libco会用一个CallStack保存这样调用关系。 这个CallStack长度是只有128,这段代码的fun大概嵌套126次就会core dumped(每个线程首次创建协程都会初始化一个main协程,并且总是在CallStack的栈底)。

popstk avatar Apr 13 '17 03:04 popstk

与普通的递归调用一样的结果:栈溢出

YingshuLu avatar Apr 13 '18 05:04 YingshuLu