C/C++协程的实现方式总结
2021-06-19 23:04
标签:make 方式 convert cas else getc style switchto jmp 1、利用 C 语言的 setjmp 和 longjmp,函数中使用 static local 的变量来保存协程内部的数据。 函数原型:int setjmp(jmp_buf envbuf); void longjmp(jmp_buf envbuf, int val); 先调用setjmp,用变量envbuf记录当前的位置,然后调用longjmp,返回envbuf所记录的位置,并使setjmp的返回值为val。使用longjmp后,envbuf的内容会被销毁。 一个例子(引自《C专家编程》): 打印结果: first time through in banana() back in main 2、利用C语言语法switch-case的技巧来实现(Protothreads) 。 3、使用汇编代码来切换上下文(实现c协程) 。 4、利用操作系统提供的接口:Linux的ucontext,Windows的Fiber。(云风的coroutine) ucontext: makecontext() 创建上下文 getcontext() 读取上下文 setcontext() 设置上下文 swapcontext() 跳转上下文 Fiber(纤程):ConverThreadToFiber() 从当前线程进入纤程 CreateFiber() 创建新纤程 SwitchToFiber() 切换到纤程 DeleteFiber() 删除纤程,如果删除当前纤程,会导致它所在的线程退出 C/C++协程的实现方式总结 标签:make 方式 convert cas else getc style switchto jmp 原文地址:https://www.cnblogs.com/heluan/p/9689751.html 1 #include