C 中的 setcontext 函数系列是延续吗?
Is setcontext functions family in C a continuation?
这两个 (setcontext, Continuation) 概念如何相互关联?我们在使用 setcontext
技术时是否会创建延续的实例?
您通过 getcontext()
、makecontext()
或 swapcontext()
初始化的 ucontext_t
对象保留堆栈和 CPU 状态——但不保留堆-- 以后可以通过 setcontext()
或 swapcontext()
激活。这类似于延续。
该子系统的设计似乎并不是为了实现延续本身,而是作为对 sigsetjmp()
和 siglongjmp()
的改进。特别是,上下文捕获一个信号掩码,当上下文被激活时,它会被恢复。每个上下文还保持当前上下文终止时要恢复的上下文感。在这些意义上,上下文可以被认为不同于纯粹的延续。
请注意 getcontext(
2)
、makecontext(
3)
和 swapcontext(
3)
现在都被 POSIX,没有为用户代码获取有效上下文留下直接的、未弃用的方式。三参数信号处理程序仍然有一个作为其第三个参数,但它非常无用,因为在最近版本的 SuS / POSIX.
中有意未指定恢复该上下文的效果
这两个 (setcontext, Continuation) 概念如何相互关联?我们在使用 setcontext
技术时是否会创建延续的实例?
您通过 getcontext()
、makecontext()
或 swapcontext()
初始化的 ucontext_t
对象保留堆栈和 CPU 状态——但不保留堆-- 以后可以通过 setcontext()
或 swapcontext()
激活。这类似于延续。
该子系统的设计似乎并不是为了实现延续本身,而是作为对 sigsetjmp()
和 siglongjmp()
的改进。特别是,上下文捕获一个信号掩码,当上下文被激活时,它会被恢复。每个上下文还保持当前上下文终止时要恢复的上下文感。在这些意义上,上下文可以被认为不同于纯粹的延续。
请注意 getcontext(
2)
、makecontext(
3)
和 swapcontext(
3)
现在都被 POSIX,没有为用户代码获取有效上下文留下直接的、未弃用的方式。三参数信号处理程序仍然有一个作为其第三个参数,但它非常无用,因为在最近版本的 SuS / POSIX.