每日一搏 | C语言中用 System V ucontext 实现的协程切换
此文在看了 python 中基于 yield
和 yield from
(同步基于 yield 的子生成器/协程)机制的生成器/协程后,就想在C语言中实现类似机制。
在阅读 System V ucontext
手册后,便选择基于他来实现(要是此文自己实现“上下文切换描述”的话,该部分功能所花时间应该会比已有C代码所花时间要多)。所实现功能包括:
- yield
- yield from
- 基于 yield 和 yield from 机制协程的调度器 loop
这些功能皆在 ln_cs.c 中实现,experiences目录下为体验以上功能机制的例子(运行体验可参见 doc 目录下的文档)。
. ├── doc │ ├── A coroutine switching implement ... in C-language.md │ └── An optimization for ... in C-language.md ├── experiences │ ├── make_e │ ├── loop_e │ │ ├── loop_e.c │ │ ├── Makefile │ ├── yield_e │ │ ├── Makefile │ │ └── yield_e.c │ └── yield_from_e │ ├── Makefile │ └── yield_from_e.c ├── include │ ├── ln_comm.h │ └── ln_cs.h ├── readme.md └── src └── ln_cs.c
核心代码 ln_cs.c 经过此文的一些技巧性修剪后不到 500 行,所以还是很想分享的——便补写了文档
与源码一起上传到了 github 和 gitee之上。
- github地址:https://github.com/misskissC/ucoroutine_switching
- gitee 地址:https://gitee.com/misskissC/ucoroutine_switching
用过 System V ucontext
或对CPU执行程序原理有所理解的同学应该都能胜任对该程序的阅读理解,有兴趣或与此文具相同程序理念(从源码或文档中可以看出一些吧)的同学一起出出新招继续提升下该程序吧。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
疫情限制出行期间,让开发人员躺着床上就把活给干了
远程工作,是我等一直期待的工作状态。每天早上睡到自然醒(五点就醒的人闭嘴),洗个牙刷个脸,悠悠哉哉吃碗红薯稀饭。回到床上,打开笔记本电脑,看看新闻,刷刷动弹。开始干活! 今年的疫情就让大家提前进入远程工作状态,相比 2003 年非典时还没有那么发达的互联网来说,现在的条件要成熟很多。 对于程序员来说,远程工作可不只是一个即时通讯、任务管理和视频会议就能搞定滴。 我们最需要的是一个代码协作平台。以前我们可能在公司内部跑了一套 SVN 或者 Git 的代码管理软件,但是多数公司没有提供 VPN 远程接入,导致延迟上班很多开发者无法访问公司的代码。非常影响工作节奏有没有! 现在,你是不是需要着手将这些代码迁移到 Gitee 企业版之上,让远程工作实实在在的开展起来呢? Gitee 企业版一个通过 ISO 27001 安全认证和 ISO 9001 质量认证的企业协作开发平台,主要特性: 安全先行 各种安全机制确保你的代码不会被未授权访问 提供详细的操作日志、访问日志,谁做了什么一目了然 代码快照 —— 想删库走人?门都没有! 还有很多。。。。 代码管理 企业->项目->仓库 多级代...
- 下一篇
Joomla 3.9.15 发布,免费建站系统
Joomla 3.9.15现已更新。这是Joomla的3.x系列的安全版本,它解决了三个低安全漏洞,包含20多个错误修复和改进。 3.9.15是什么? Joomla 3.9.15包含三个安全漏洞修复程序,并解决了几个漏洞,包括: 安全问题已修复 低优先级-核心-CSRF批量操作(影响Joomla 3.0.0至3.9.14) 低优先级-核心-CSRF com U模板少编译器(影响Joomla 3.0.0到3.9.14) 低优先级-核心-com操作日志中的XSS(影响Joomla 3.9.0到3.9.14) 错误修复和改进 Beez模板:修复同意字段model 操作日志电子邮件:使用绝对URL TinyMCE修复程序 用户电子邮件地址:不区分大小写管理 防止库扩展覆盖核心文件 访问GitHub以获取错误修复的完整列表 下载 下载Joomla 3.9.15 完整包 下载Joomla 3.9.15 升级包
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19