c - 用户空间中的线程和产量

标签 c multithreading operating-system

我应该在 C 中实现一个用户级线程库。为此,我需要实现 yield()createThread()destroyThread( ) 函数。我相信我已经掌握了正确的基础知识:

为了跟踪线程,我将使用如下所示的 ThreadControlBlock 元素队列(类似于操作系统中的 PCBs):

struct ThreadControlBlock { 
    int ThreadId, 
    u_context *context };

我们可以使用 setcontext() 系列函数来“保存”和“加载”上下文。 在程序初始化时,初始化没有元素的 ThreadQueue。

现在是我没有得到的部分:当线程调用 yield() 时,我得到当前上下文并将其保存在 ThreadControlBlock 中并放入队列中。然后获取队列中的第一个元素并在其中加载上下文,然后继续执行。

问题是,如果我这样做,假设我是一个调用 yield() 的线程,而下一个线程是我自己。如果我正在保存上下文并再次加载它,那么在重新进入时我会不会在我所在的位置(在调用 yield() 之前?)并且这将永远持续下去?

最佳答案

当线程调用 yield() 时,您必须保存即将从 yield() 调用返回的线程的状态。不要保存 yield() 之前的上下文。

关于c - 用户空间中的线程和产量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781868/

相关文章:

c - 合并十六进制值中的位

c++ - MS VC++ 编译器模棱两可

java - 查找线程池内 Activity 线程的名称: ExecutorService in java

c - 多线程程序中线程的执行顺序

c++ - 将 ADA API 公开给 C/C++(可扩展方式)

c - 链表removeNode C编程

Python - 在当前 Windows 资源管理器中获取所选文件的路径

python - 在启动 raspbian 时运行 bash 或 python 脚本

c# - 再次提供多线程帮助 (winForms)

linux机器上可以查看页表吗