C语言中的setcontext函数族是一个延续吗?

时间:2016-03-22 15:33:08

标签: c continuations

这两个(setcontextContinuation)概念如何相互关联?使用setcontext技术时,我们是否创建了延续的实例?

1 个答案:

答案 0 :(得分:1)

通过ucontext_tgetcontext()makecontext()初始化的swapcontext()对象保留堆栈和CPU状态 - 但不保留堆 - 以某种方式稍后可以通过setcontext()swapcontext()激活。这类似于延续。

然而,子系统似乎没有设计为实现延续的想法,但更多是sigsetjmp()siglongjmp()的改进。特别地,上下文捕获信号掩码,该信号掩码在上下文被激活时被恢复。每个上下文还保持当前上下文终止时要恢复的上下文的感觉。在这些意义上,上下文可能被认为与纯粹的延续不同。

请注意,getcontext( 2 )makecontext( 3 )swapcontext( 3 )现已被POSIX全部弃用,用户代码获取有效上下文的直接,非弃用方式。一个三arg信号处理程序仍然得到一个作为它的第三个参数,但它很无用,因为在最近版本的SuS / POSIX中有意未指定恢复该上下文的效果。