Prothreads(超级轻量多任务)
要点 :
①Prothreads 不是真正意义上的多任务,任务切换并不做cpu寄存器的压栈和出栈,也因此它不设计任何硬件平台的关系。
②Prothreads 任务中不能使用局部变量
③Prothreads 源码地址: Protothreads - download (dunkels.com),或者地址:https://files.cnblogs.com/files/blogs/698223/pt-1.4.tar.gz
分析源码,看这段源码就知道原理了:
example-small.c
struct pt {
lc_t lc;
};
static int
protothread1(struct pt *pt)
{
PT_BEGIN(pt);
while(1) {
PT_WAIT_UNTIL(pt, protothread2_flag != 0);
printf("Protothread 1 running\n");
protothread2_flag = 0;
protothread1_flag = 1;
}
PT_END(pt);
}
int main(void)
{
PT_INIT(&pt1);
PT_INIT(&pt2);
while(1) {
protothread1(&pt1);
protothread2(&pt2);
}
}
展开就是:
int main(int argc, char* argv[])
{
Tpt* pt = &tpt;
pt->lc = 0;
while(1){
//threads 1
{
//PT_BEGIN
char PT_YIELD_FLAG = 1;
switch((pt)->lc){
case 0:
//PT_BEGIN
//PT_WAIT_UNTIL 这里就是精髓
while(1){
do{
(pt)->lc = __LINE__;
case __LINE__:
if(!condition){
return PT_WAITING;
}
}while(0);
//PT_WAIT_UNTIL
//your task here
printf("Protothread 1 running\n");
}
//END
}
PT_YIELD_FLAG = 0;
(pt)->lc = 0;
return PT_ENDED;
//END
}
//threads 1
}
return 0;
}
原文地址:https://www.cnblogs.com/ellson/p/15117831.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Yii2处理密码加密及验证的方法
- PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
- python如何输出反斜杠
- 在Laravel5中正确设置文件权限的方法
- asp函数split()对应php函数explode()
- php获取目录下所有文件及目录(多种方法)(推荐)
- Python基于Twilio及腾讯云实现国际国内短信接口
- PHP __call()方法实现委托示例
- PHP中rename()函数的妙用讲解
- php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
- php实现小程序支付完整版
- Yii2框架视图(View)操作及Layout的使用方法分析
- php实现单笔转账到支付宝功能
- PHP使用Redis实现Session共享的实现示例
- windows10在visual studio2019下配置使用openCV4.3.0