关于Getcontext函数的问题

关于Getcontext函数的问题,c,multithreading,C,Multithreading,我正在尝试实现一个用户级线程库。Getcontext函数用于将当前线程的上下文保存在内存中。函数Getcontext用于两种情况 保存当前上下文并移动到下一个线程 创建新的上下文 但是,在这两种情况下,它都返回相同的值。那么,我如何区分这两种情况呢 谢谢getcontext不会移动到新线程,setcontext()和swapcontext()会移动到新线程。 线程库应至少实现以下两个功能: 创建新线程的能力 能够切换到另一个线程 在第一种情况下,调用getcontext()初始化ucontext

我正在尝试实现一个用户级线程库。Getcontext函数用于将当前线程的上下文保存在内存中。函数Getcontext用于两种情况

  • 保存当前上下文并移动到下一个线程
  • 创建新的上下文
  • 但是,在这两种情况下,它都返回相同的值。那么,我如何区分这两种情况呢


    谢谢

    getcontext不会移动到新线程,setcontext()和swapcontext()会移动到新线程。 线程库应至少实现以下两个功能:

  • 创建新线程的能力

  • 能够切换到另一个线程

  • 在第一种情况下,调用getcontext()初始化ucontext\u t,为堆栈分配内存并在ucontext\u t中设置堆栈指针,然后调用makecontext()用启动函数初始化上下文

    在第二种情况下,调用getcontext()存储当前线程的上下文,调用setcontext()切换到先前存储的另一个线程。或者,更常见的情况是,将swapcontext与get/setcontext调用结合使用。
    例如,有关使用get/setcontext实现协作线程的非常简单的方法,请参阅。

    非常感谢您的帮助:-)。我还有一个问题。getcontext、setcontext、makecontext和swapcontext函数是否存在信号安全问题?如果有,你能解释一下到底发生了什么吗?嗯,根据,这些函数不是信号安全的——这意味着如果你是这样要求的话,你不能在信号句柄中使用它们。如果你这样做了,会发生什么,这是毫无意义的推测。