从 ucontext 终止时获取 return 值

Get return value from ucontext as it terminates

我正在使用 ucontext_t 实现用户级线程库。我通过 uc_link 将线程链接到调度程序线程,但是,在某些情况下我们需要获取 return 值。我不知道如何获取 return 值,因为上下文是分开的。 我能想到的访问 return 值的唯一方法是以某种方式进入该上下文的堆栈并找到 return 值所在的位置。但是,这似乎是灾难和奇怪错误的公式。

Get return value from ucontext as it terminates

ucontext_t 表示的执行上下文没有 return 值。这在 entry-point 函数终止时的行为中是隐含的(后继上下文,如果有的话,被激活),并且在 entry-point 函数的签名中是显式的(它 returns void).

另请注意,entry-point 函数还必须是 non-variadic,这与 makecontext() 本身不同,尽管它可以采用任何固定数量的参数。 makecontext 的调用者有义务指定正确的参数计数和 int 个参数。

如果你想在上下文之间传递数据,那么你应该将它或指向它的指针写入某个共享内存位置,稍后你可以在不同的上下文中从中检索它。据推测,在这种情况下,这将位于您的库为每个线程维护的元数据中的某处。

如果相关数据是某个函数的 return 值,则该函数不能是上下文的 entry-point。在这种情况下(以及其他原因),您可能希望避免使用用户提供的函数作为 ucontext 入口点。相反,使用库内部提供的函数,该函数知道如何 bootstrap 到用户函数以及当它 returns.

时该做什么