我正在尝试实现一个用户级线程库。 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/

    10-15 04:45