在其最简单的形式下,线程将需要: 一些用于堆栈空间的内存 某个位置来存储其上下文(即寄存器内容、程序计数器、堆栈指针等) 除此之外,您还需要实现一个简单的“内核”,负责线程切换。如果您试图实现抢占式线程,则还需要定期中断源。例如,一个计时器。在这种情况下,您可以在计时器中断中执行线程切换代码。请查看setjmp()/longjmp()例程以及相应的jmp_buf结构。这将使您轻松访问堆栈指针,以便分配自己的堆栈空间,并为提供线程上下文捕获所有寄存器内容提供简单的方法。通常,longjmp()函数是返回中断指令的包装器,非常适合在计时器中断中具有线程调度功能。但是,您需要检查平台上longjmp()和jmp_buf的实现。尝试在较小的微处理器上查找线程实现,这些微处理器通常没有操作系统,例如Atmel AVR或Microchip PIC。例如:AVRFreaks上的讨论。
为了一个好的线程库,您需要: 原子操作以避免竞争(例如实现互斥锁) 一些操作系统支持进行调度和避免忙等待 一些操作系统支持实现上下文切换 这三个都超出了C99所提供的范围。原子操作在C11中引入,但目前C11实现似乎还没有准备好,因此这些通常是用汇编语言实现的。对于后两个,您必须依赖于您的操作系统。