详细说明:“原始线程”是一种轻量级的、无需堆栈的线程。它主要用于内存极为受限的系
统,如深入嵌入式系统、传感器网络等。
“原始线程”是以 C 代码实现的,为事件驱动的系统提供了线性的代码执行空间。“原始线
程”即可以用在有实时操作系统的系统中,也可以用在没有实时操作系统的系统中。
它在事件驱动的系统上层提供了阻塞上下文,省去了每个线程的单独堆栈空间开销。原始
线程的目标是在没有复杂的状态机或多线程的情况下实现控制顺序流。原始线程在 C 语言
内部实现了条件阻塞。
原始线程相对于纯事件驱动方法的优势是原始线程提供了可以阻塞函数的顺序代码结构。
在纯事件驱动的方法中,阻塞的实现必须将一个函数手动分成两个部分。一部分放在阻塞
调用前,一部分放在阻塞调用后。这让使用 if()和 while()语句变得困难。
原始线程相对于普通线程的优势是,它不需要为每个线程分配堆栈。在内存受限的系统中,
为每个线程分配堆栈空间会占用大量的内存。相比而言,原始线程的每个线程只需 2 到 12
个字节的状态字,具体多大与构架有关。
注意:
由于原始线程有阻塞调用中中不需保存堆栈上下文,原始线程阻塞时,局部变量也不再保
留。这意味着局部变量的使用必须十分小心。如果不确定的话,尽量不要有原始线程中使
用局部变量。
主要特性:
无机器相关代码-代码完成是 C 写的。
不使用错误-倾向于像 longjump()这样的函数。
很小的 RAM 开销-每条线程仅两个字节。
即可使用 OS,也可以不使用。
提供阻塞等待而无需多线程或堆栈切换。
主要应用:
内存受限系统
事件驱动的协议栈
深入嵌入式系统
传感器网络
原 始 线 程 包 括 四 个 基 本 的 操 作 : 初 妈 化 (PT_INIT()), 执 行 (PT_BEGIN()), 条 件 阻 塞
(PT_WAIT_UNTIL()),和退出(PT_EXIT()).在此之上还有两个方便使用的函数:反向条件阻
塞(PT_WAIT_WHILE())和原始线程阻塞(PT_WAIT_THREAD()).
见:uIP 中文文档第五 原始套接字
原始线程线的分布是基于一个类似于 BSD 的协议的。也就是说允许商业的和非商业的使用。
唯的需要是"credit is given".
原始线程:原始线程是极端轻量级的、无需堆栈的线程。它在事件驱动的系统上层提供阻
塞上下文,无需为每个线程提供堆栈的开销。原始线程的目标是在没有复杂的状态机或多
线程的情况下实现控制顺序流。原始线程在 C 函数内部实现了条件阻塞。
在内存受限的系统中,如深入嵌入式系统,传统的多线程的内存开销可能会显得过大。在
传统线程中每条线程都需要自己堆栈,这种要求并非必要的。堆栈空间可能花去大部分的