我正在尝试实现一个用户级线程库。 Getcontext 函数用于将当前线程的上下文保存在内存中。 Getcontext 函数用于 2 种情况
但是,在这两种情况下,它返回相同的值。那么,我如何区分这两种情况?
谢谢
最佳答案
getcontext 不会移动到新线程, setcontext() 和 swapcontext() 会。
您的线程库至少应实现以下 2 个功能:
在第一种情况下,您调用 getcontext() 来初始化 ucontext_t ,为堆栈分配内存并在 ucontext_t 中设置堆栈指针,然后您调用 makecontext() 以使用启动函数初始化上下文。
在第二种情况下,您调用 getcontext() 来存储当前线程的上下文,并调用 setcontext() 来切换到您之前存储的另一个线程。或者,更常见的是,您将使用 swapcontext 结合 get/setcontext 调用。
见例如here 是一种使用 get/setcontext 实现协作线程的非常简单的方法。
关于c - 关于 Getcontext 函数的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7449457/