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

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

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

相关推荐
2301_795167205 分钟前
Python 高手编程系列八:缓存
开发语言·python·缓存
helloyangkl11 分钟前
前端——不同环境下配置env
前端·javascript·react.js
8***293115 分钟前
Go基础之环境搭建
开发语言·后端·golang
Yue丶越30 分钟前
【C语言】自定义类型:联合体与枚举
c语言·开发语言
甜味弥漫33 分钟前
JavaScript新手必看系列之预编译
前端·javascript
用户66006766853936 分钟前
搞懂作用域链与闭包:JS底层逻辑变简单
前端·javascript
csbysj20201 小时前
DOM 节点
开发语言
没落英雄1 小时前
简单了解 with
前端·javascript
小小弯_Shelby1 小时前
vue项目源码泄露漏洞修复
前端·javascript·vue.js
小尧嵌入式1 小时前
C++基础语法总结
开发语言·c++·stm32·单片机·嵌入式硬件·算法