xthread(X Thread)是一个用户态的多线程库,调度器位于用户态,不是依赖于内核的调度器。
本项目是参加2020 openEuler高校开发者大赛赛题4-LUTF - Linux Userspace Task Framework的作品。
LUTF要完成:
任务的定义与抽象,典型的,一个任务可以是一个C语言函数;
提供任务的管理接口,提供任务的创建,管理等功能;
进行任务的调度;
约束:
纯 Linux 用户态实现;
同时支持的任务数量不少于一百万;
任务的调度支持 FIFO;
基于 setjmp 和 longjmp 实现任务切换;
基于 signal 实现中断;
按照赛题要求完成全部要求!
导师说可以使用非setjmp和longjmp实现任务切换,于是选择了更简单的ucontext来实现。
xthread的编程接口和pthread编程接口相似,使得有过pthread使用经验的开发者可以快速通过开发文档上手开发。
make # 编译库并且生成demo
见demo目录
test_cancel: 测试取消线程功呢
test_coroutine: 测试协程功能
test_factor: 测试线程的生产
test_fifo: 基于信号量和互斥锁的fifo队列
test_thread: 测试线程功能
test_mutex: 测试互斥锁
test_sema: 测试信号量
test_timer: 测试定时器
test_yield: 测试yield功能
执行demo:
./demo/demo+测试功能名,不加测试功能名默认测试thread
例如:
./demo/demo fifo
./demo/demo yield
docmain: 主文档
thread: xthread核心使用帮助
thread-attr: xthread属性使用帮助
thread-lock: 自旋锁使用帮助
thread-mutex: 互斥锁使用帮助
thread-sema: 信号量使用帮助
thread-timer: 定时器使用帮助
1.xthread基于SIGALRM信号,因此你使用后不能用这个信号。
2.如果使用的是共享库,则需要把共享库地址添加到环境变量中,才能执行demo: export LD_LIBRARY_PATH=./xthread/:$LD_LIBRARY_PATH
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。