1
9
你说得对
设置
你为什么要把函数归零
下面是我将如何处理整个事情,尽可能简单:
哪里
此函数执行以下操作:
现在我们有另一个功能:
哪里
最后一个函数声明为:
这个函数在协程中被调用,以“暂停”协程的执行并返回给
协程函数本身声明为:
好吧,你现在可能会想“那很简单!”,但是我忽略了以正确的顺序加载寄存器和标志的所有复杂操作,同时仍然保持一个非损坏的堆栈框架,并以线程安全的方式保持协程数据结构的地址(您只需重写所有寄存器)。对于这一部分,您需要了解编译器如何在内部工作。。。祝你好运:) |
2
1
libcoroutine 尤其是它们的setjmp/longjmp实现。我知道使用现有的图书馆并不有趣,但你至少可以大致了解你要去哪里。 |
3
1
西蒙·塔塔姆有一个 interesting implementation of coroutines in C 这不需要任何特定于体系结构的知识或堆栈摆弄。这并不完全是你想要的,但我想这至少会引起学术界的兴趣。 |
4
-1
boost.org上的boost.coroutine(boost.context)为您做所有的事情 |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
masec · 是否将EAX复制到RAX高位? 6 年前 |
Pushpam Kumar · 从可利用程序运行时出现外壳代码分段错误 6 年前 |
RTC222 · CTypes返回值错误 6 年前 |
SeanRamey · 汇编指令中冒号(:)的含义未知 7 年前 |
Lynx · Ubuntu 16.04服务器amd64安装失败 7 年前 |