实现用户级线程包

Sir*_*tan 17 c multithreading

我已经在一个类中负责在C中创建一个用户级线程库.我想知道是否有人可以给我一个事项列表来阅读以实现这一目标.我对从哪里开始有一个好主意,但是用户级线程上的任何资源以及可能有用的C语言的一些适用方面都非常有价值.

我不清楚我将如何实现这样的调度程序.假设我对C语言及其一些更有用的库函数有很好的理解.

J. *_*mon 8

我完成了这项工作,没有任何汇编程序.线程切换机制是setjmp/ longjmp.这涉及为每个线程的堆栈分配内存,然后非常仔细地按摩jmp_buff所以执行中的值跳转到下一个线程的堆栈.

另请参阅Russ Cox非常易读的libtask.

编辑以响应OP的评论:在决定何时切换线程时,有两个主要方向:抢先和合作.在抢先模型中,你会有一些像定时器信号那样导致执行流程跳转到中央调度程序线程,该线程选择下一个运行的线程.在协作模型中,线程彼此"产生",或者显式地(例如,通过调用yield()您将提供的函数)或者隐式地(例如,请求由另一个线程持有的锁).

查看libtask的API以获取合作模型的示例,尤其是函数的描述taskyield().这是我提到的明确收益率.也有非阻塞I/O功能,其中包括一个隐含的收益率,目前的"任务"被搁置,直到I/O完成,但其他任务让他们有机会运行.