gpt4 book ai didi

c++ - makecontext()/swapcontext() 函数是否与 C++ 兼容

转载 作者:可可西里 更新时间:2023-11-01 16:39:40 28 4
gpt4 key购买 nike

在 unix 环境中,makecontext()/swapcontext() 函数系列有时用于在 C 中实现协程。然而,这些函数直接操作堆栈和执行流。当从 C 切换到 C++ 时,这些低级功能通常有很大不同。

所以问题是,使用makecontext()swapcontext() 实现协程是否会有任何问题。当然,显然必须非常小心,异常永远无法逃脱这样的协程,因为堆栈上没有异常处理程序,程序很可能会出现段错误。但除此之外,C++ 内部处理事物的方式与 makecontext()setcontext() 修改执行路径之间是否存在任何不兼容?

最佳答案

我之前在 C++ 代码中使用过 makecontext()/swapcontext(),正如您所说,主要要注意的是异常。除此之外,我没有遇到任何麻烦。尽管根据标准它们已经过时,但它们仍然得到类 unix 操作系统的良好支持。 (对于 Mac OS X 有一个警告:您必须在 #including 相关 header 之前 #define _XOPEN_SOURCE。)让它们过时的理由也很站不住脚 -他们本可以用类似 pthreads 的版本替换它们,其中函数指针采用单个 void* 参数。

如您所说,线程不是有用的替代品,所以我会继续使用 swapcontext()。您还可以找到 this blog post滚动您自己的函数版本很有趣。

关于c++ - makecontext()/swapcontext() 函数是否与 C++ 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268828/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com