我正在尝试实现用户级线程库。 Getcontext函数用于保存当前线程在内存中的上下文。 Getcontext函数用于2种情况
但是,在这两种情况下,它都返回相同的值。那么,我如何区分这两种情况呢?
由于
答案 0 :(得分:9)
getcontext不会移动到新线程,setcontext()和swapcontext()会移动。 您的线程库应该至少实现这两个功能:
能够创建新主题。
能够切换到另一个线程。
在第一种情况下,调用getcontext()初始化ucontext_t,为堆栈分配内存并在ucontext_t中设置堆栈指针,然后调用makecontext()以使用启动函数初始化上下文。
在第二种情况下,调用getcontext()来存储当前线程的上下文,并调用setcontext()以切换到先前存储的另一个线程。或者,更常见的是,您使用swapcontext结合get / setcontext调用。 参见例如here用于使用get / setcontext实现协作线程的一种非常简单的方法。