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;
        }
    };

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

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

相关推荐
luoyayun3617 分钟前
Qt QML实现视频帧提取
开发语言·qt·视频帧提取
一 乐21 分钟前
农业电商|基于SprinBoot+vue的农业电商服务系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·农业电商
浅安的邂逅39 分钟前
C++ STL 之常用拷贝和替换算法①copy();②replace();③replace_if();④swap();
开发语言·c++·算法·stl
Trouvaille ~40 分钟前
【Java篇】无形至有形,法与道的编织:类与对象初探
java·开发语言·类和对象·javase·编程规范·基础入门·面相过程
quan263142 分钟前
wangEditor富文本轻量使用及多个编辑器
javascript·编辑器·wangeditor·多个编辑器
束尘1 小时前
React前端开发中实现断点续传
前端·javascript·react.js
一蓑烟雨,一任平生1 小时前
React-state响应式内部数据(类组件&Hook两种方式整理)
前端·javascript·react.js
优雅的落幕1 小时前
Java---SpringMVC(2)
java·开发语言
浅安的邂逅1 小时前
C++ STL 之常用排序算法①sort②random_shuffle③merge④reverse
开发语言·c++·算法·stl·排序算法
好_快1 小时前
Lodash源码阅读-matchesStrictComparable
前端·javascript·源码阅读