Sylar---协程调度模块

协程调度模块:

首先是协程任务类FiberAndThread,包括协程,函数,指定的线程;提供了五个构造函数,只传协程的智能指针,只传函数对象,传协程智能指针的指针,函数对象指针,还有一个默认构造函数,为了是STL容器中初始化时调用默认构造函数,reset方法将任务的资源重置。

cpp 复制代码
 struct FiberAndThread {
        Fiber::ptr fiber;
        std::function<void()> cb;
        int thread;
        FiberAndThread(Fiber::ptr f, int thr)
            :fiber(f), thread(thr) {
        }

       
        FiberAndThread(Fiber::ptr* f, int thr)
            :thread(thr) {
            fiber.swap(*f);
        }

       
        FiberAndThread(std::function<void()> f, int thr)
            :cb(f), thread(thr) {
        }

        
        FiberAndThread(std::function<void()>* f, int thr)
            :thread(thr) {
            cb.swap(*f);
        }

        
        FiberAndThread()
            :thread(-1) {
        }

        
        void reset() {
            fiber = nullptr;
            cb = nullptr;
            thread = -1;
        }
    };

内部维护了一个线程池,以及任务队列,当线程取任务时需要枷锁,这里使用互斥锁。

提供添加调度任务的方法,添加的可以是函数或者协程,也提供批量添加任务,使用迭代器作为参数,添加任务时加锁,然后调用无锁添加任务函数进行添加操作,添加完成侯通知对应的线程有任务来了,具体没有实现。

相关推荐
十八朵郁金香19 分钟前
【VUE案例练习】前端vue2+element-ui,后端nodo+express实现‘‘文件上传/删除‘‘功能
前端·javascript·vue.js
LCG元1 小时前
Vue.js组件开发-实现全屏图片文字缩放切换特效
前端·javascript·vue.js
xrgs_shz1 小时前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
还是鼠鼠2 小时前
图书管理系统 Axios 源码__新增图书
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
来恩10034 小时前
C# 类与对象详解
开发语言·c#
komo莫莫da5 小时前
寒假刷题Day19
java·开发语言
ElseWhereR5 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法
还是鼠鼠5 小时前
图书管理系统 Axios 源码 __删除图书功能
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
轻口味5 小时前
Vue.js `Suspense` 和异步组件加载
前端·javascript·vue.js