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

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

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

相关推荐
十八朵郁金香3 分钟前
深入理解 SSE:服务器发送事件及其在前后端中的实践
前端·javascript
枫叶丹47 分钟前
【Qt开发】输入类控件(三)-> QComboBox
开发语言·qt
鹏多多7 分钟前
React自定义Hooks设计指南:从封装到复用
前端·javascript·react.js
K 旺仔小馒头17 分钟前
【代码的暴力美学】-- C语言基础编程题_2
c语言·开发语言·刷题
MediaTea25 分钟前
Python 编辑器:Visual Studio Code
开发语言·ide·vscode·python·编辑器
懒羊羊不懒@27 分钟前
C语言指针进阶(进阶)
java·开发语言·面试
前路不黑暗@40 分钟前
Java:代码块
java·开发语言·经验分享·笔记·python·学习·学习方法
Pocker_Spades_A1 小时前
C++程序设计上机作业(1)
开发语言·c++
上单带刀不带妹1 小时前
Vue3 全局 API 转移详解
前端·javascript·vue.js·vue3·api
乱飞的秋天1 小时前
C++中的特殊成员函数
开发语言·c++