我正在使用ucontext_t
. 我通过 将线程链接到调度程序线程uc_link
,但是,在某些情况下我们需要获取返回值。我不知道如何获取返回值,因为上下文是分开的。我能想到的访问返回值的唯一方法是以某种方式进入该上下文的堆栈并找到返回值的位置。然而,这似乎是灾难和奇怪错误的公式。
问问题
26 次
1 回答
1
在 ucontext 终止时获取返回值
诸如由 表示的执行上下文ucontext_t
没有返回值。这在入口点函数终止时的行为中是隐含的(后继上下文,如果有的话,被激活),并且在入口点函数的签名中是明确的(它返回void
)。
还要注意,入口点函数必须另外是非可变的,不像makecontext()
它自己,尽管它可以接受任何固定数量的参数。的调用者makecontext
有义务指定正确的参数计数和那么多int
参数。
如果您想在上下文之间传递数据,那么您应该将它或指向它的指针写入某个共享内存位置,您可以稍后在不同的上下文中从中检索它。据推测,在这种情况下,这将位于您的库为每个线程维护的元数据中的某个位置。
如果有问题的数据是某个函数的返回值,那么该函数不能是上下文的入口点。在这种情况下(以及其他原因),您可能希望避免使用用户提供的函数作为 ucontext 入口点。相反,请使用库内部提供的函数,该函数知道如何引导到用户函数以及返回时要做什么。
于 2022-03-03T15:54:18.710 回答