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

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

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

相关推荐
懂点Tech3 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang4 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
美狐美颜SDK开放平台5 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04245 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘565 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅5 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅6 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
米米商聊7 小时前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
bkspiderx7 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信
小王C语言7 小时前
Qt常用控件:输入类控件,单行/多行输入框、下拉框、(日期)微调框、旋钮、滑动条
开发语言·qt