【发布时间】:2011-04-16 11:05:35
【问题描述】:
我应该在 C 中实现一个用户级线程库。为此,我需要实现 yield()、createThread() 和 destroyThread() 函数。我相信我已经掌握了基本知识:
为了跟踪线程,我将使用如下所示的ThreadControlBlock 元素队列(类似于操作系统中的PCBs):
struct ThreadControlBlock {
int ThreadId,
u_context *context };
我们可以使用setcontext() 系列函数来“保存”和“加载”上下文。
程序初始化后,初始化没有元素的 ThreadQueue。
现在我没有得到的部分:当一个线程调用yield() 时,我获取当前上下文并将其保存在ThreadControlBlock 中并放入队列中。然后获取队列中的第一个元素并在其中加载上下文,然后继续执行。
问题是,如果我这样做,假设我是一个调用yield() 的线程,而下一个线程是我自己。如果我保存上下文并再次加载它,在重新输入时,我会不会在我所在的位置(在调用 yield() 之前?)这会一直持续下去吗?
【问题讨论】:
-
+1 用于与家庭作业相关的示例性问题,而不仅仅是“请为我做作业”。这本身就是一个有趣的问题,它触及了任务上下文切换如何实际工作的核心。
标签: c multithreading operating-system