这两个(setcontext,Continuation)概念如何相互关联?使用setcontext
技术时,我们是否创建了延续的实例?
答案 0 :(得分:1)
通过ucontext_t
,getcontext()
或makecontext()
初始化的swapcontext()
对象保留堆栈和CPU状态 - 但不保留堆 - 以某种方式稍后可以通过setcontext()
或swapcontext()
激活。这类似于延续。
然而,子系统似乎没有设计为实现延续的想法,但更多是sigsetjmp()
和siglongjmp()
的改进。特别地,上下文捕获信号掩码,该信号掩码在上下文被激活时被恢复。每个上下文还保持当前上下文终止时要恢复的上下文的感觉。在这些意义上,上下文可能被认为与纯粹的延续不同。
请注意,getcontext(
2 )
,makecontext(
3 )
和swapcontext(
3 )
现已被POSIX全部弃用,用户代码获取有效上下文的直接,非弃用方式。一个三arg信号处理程序仍然得到一个作为它的第三个参数,但它很无用,因为在最近版本的SuS / POSIX中有意未指定恢复该上下文的效果。