C语言封装的轻量线程环境 Protothreads

分享到:

Protothreads是一种针对C语言封装后的宏函数库,为C语言模拟了一种无堆栈的轻量线程环境,能够实现模拟线程的条件阻塞、信号量操作等操作系统中特有的机制,从而使程序实现多线程操作。每个Protothreads线程仅增加10行代码和2字节RAM的额外硬件资源消耗。对于资源紧缺而不能移植嵌入式操作系统的嵌入式系统,使用Protothreads能够方便直观地设计多任务程序,能够实现用线性程序结构处理事件驱动型程序和状态机程序,简化了该类程序的设计。

主要特性:

  • Very small RAM overhead - only two bytes per protothread and no extra stacks
  • Highly portable - the protothreads library is 100% pure C and no architecture specific assembly code
  • Can be used with or without an OS
  • Provides blocking wait without full multi-threading or stack-switching
  • Freely available under a BSD-like open source license

示例程序:

  • Memory constrained systems
  • Event-driven protocol stacks
  • Small embedded systems
  • Sensor network nodes
  • Portable C applications

示例代码:

#include "pt.h"
 
struct pt pt;
struct timer timer;
 
PT_THREAD(example(struct pt *pt))
{
  PT_BEGIN(pt);
while(1) {
if(initiate_io()) {
timer_start(&timer);
PT_WAIT_UNTIL(pt,
io_completed() ||
timer_expired(&timer));
read_data();
}
  }
  PT_END(pt);
}

项目主页:http://www.open-open.com/lib/view/home/1326937925140

昵    称:
验证码:

相关文档:

  • Concurrency Control Flow 并发流程控制
    回调函数是指将函数(这里的函数是泛指某一块可执行代码的引用,如C++的仿函数或Java中的接口和对象)作为参数传递给另一个函数。...
  • 解析程序参数的C语言库 - The Lean Mean C++ Option Parser
    The Lean Mean C++ Option Parser 是一个用来解析程序参数 (argc, argv) 的 C 库,支持短和长的参数格式 getopt(), getopt_long(), and getopt_long_only(), 但提供...
  • C++ STL set集合容器常用用法
    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每...
  • C++ MVC 框架:libgitlmvc
    libgitlmvc 是一个基于Qt构建的的C++ MVC 框架...
  • C++11的并发框架:Async++
    Async++是一个轻量级的C++11并发框架。...
  • C++格式化输出库 FastFormat
    FastFormat 是一个C/C++格式化输出的库,输入的参数是类型安全的/范型的/可扩展的。...
  • C++ 工具类库:Moost
     Last.fm 的音乐信息检索团队近日开源了 moost 工具,这是该团队在产品开发过程中使用的 C++ 实用程序的集合。...
  • 轻量级的C++插件框架 - X3 C++ PluginFramework
    X3 C++ PluginFramework 代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,没有使用MFC、ATL、COM。可在Windows和Linux下编译...
  • C++ Virtual详解
    Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于...
  • 轻量级CPP开发框架 RLIB
    RLIB是一款轻量级的C++开发框架, 提供一些常见的编程任务, 采用类似C#的命名方式....
  • C语言文件操作函数大全
    clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()...
  • REEC - C语言正则表达式
    REEC是一个精简,高效的C语言正则表达式引擎,它使得C语言开发中支持正则表达式,目前已经进化到了1.2.0版本,可以说无论从功能上,...
  • C++ 简易scoket Server
    C++ 简易scoket Server...
  • C 语言中的指针和内存泄漏
    对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏。这些的确是消耗了开发人...
  • C语言和抽象思维(二)
    上一次我们说到C语言结合抽象思维完成一个非所见即所得的编辑器, 并且我们已经定义了这个编辑器应有的行为, 基本上抽象也已经完...
  • 一个 C++ 的基准测试管理库:Celero
    对代码进行持续性开发和有意义的基准测试是一个复杂的任务。虽然测试工具本身(Intel® VTune™ Amplifier, SmartBear AQTime, Valgrind)与应用程...
  • C/C++反向插件系统:PluginRuntime
    这个项目最初的灵感来源于JNI的实现,以及C/C++和LUA调用,目的是实现一个轻量的C/C++反向插件系统。 目前已经实际项目中使用。...
  • C++函数指针详解
    学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很蛋疼的难点,那就是函数指针了。本博文详细介绍一下常见的各种坑爹...
  • 编译型编程语言 eC
    eC,是一位加拿大人Jrome历时十二年开发的一门编译型编程语言,拥有C++项目的性能和Java的跨平台性以及Python的方便性。 目前eC拥有自...
  • 跨编译器构建的脚本:Build CC
    Build CC 是一个简单的脚本用于使用 GNU toolchain 进行跨编译器的构建。...