首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C语言做意大利面堆叠?

如何用C语言做意大利面堆叠?
EN

Stack Overflow用户
提问于 2011-09-13 02:34:31
回答 3查看 463关注 0票数 3

我正在尝试用C实现协程和延续。我意识到我需要一些意大利面堆栈。可以在新的调用栈内执行函数吗?当然是在单线程中。如何创建一个新的、独立的调用堆栈,并在其上执行一些代码?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-21 16:49:10

我仍然不确定延续,但至少对于协程来说,在C中没有很好的方法来做到这一点,因为这是在C抽象之外。setjmp/longjmp存在作用域限制,可能会破坏C++/Objective-C异常系统,makecontext/swapcontext已被弃用。虽然有些系统仍然支持这些功能,但至少Apple OS已经不再支持它了。

对我来说,唯一可以接受的解决方案是libtask library。它使用体系结构特定的汇编代码来保存和恢复寄存器状态,并且它还管理调用堆栈。我认为它正在使用单块堆栈,并且仍然有大小限制,但不管怎样,这几乎是我能找到的唯一可靠的解决方案。

我认为Clang's Segmented Stack (或GCC的拆分堆栈)特性将在C级别上实现非常通用的协程支持。我希望以后可以在LLVM上自由编写协程代码。

票数 0
EN

Stack Overflow用户

发布于 2011-09-13 02:51:28

查看makecontext/swapcontext。

如果这些都不可用,那么可以使用setjmp/longjmp,但这会稍微复杂一些。

票数 5
EN

Stack Overflow用户

发布于 2011-09-13 02:54:25

如果你使用的是Windows,你可以查看Fibers API。然而,邪恶的奥托的答案是更符合便携/POSIX。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7392283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档