栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++B线程调度协程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++B线程调度协程

协待可帮助完成.

构 任务{
    构 承诺类型{
        任务 取中对象(){中{协程句柄<任务::承诺类型>::从承诺(*本)};}
        从不挂起 初始挂起(){中{};}
        从不挂起 止挂起()无异{中{};}
        空 中空(){}
        空 未处理异常(){}
    };

    协程句柄<任务::承诺类型>句柄_;
  };

  构 等待器
  {
    极 准备好协(){中 假;}
    空 挂起协(协程句柄<任务::承诺类型>句柄)
    {
      线程([句柄]{句柄();}).分离();
    }//在此线程执行后面
    空 恢复协(){}
 };//等待器.

任务 测试(){
  输出<<"线程标识="<<本线程::取标识()<<"n";//#1
  协待 恢复新线程型{};
  输出<<"线程标识="<<本线程::取标识()<<"n";//#3
}

 整 主(){
     测试();
     本线程::休息(时间::秒(2));
 }

#1与#3的输出线程标识不一样.协待允许在另外线程中恢复协程,恢复点后代码在另一线程中执行了.

线程安全
任务 测试(共针<整>值){
  输出<<"线程标识="<<本线程::取标识()<<"n";//#1
  协待 恢复新线程型{};*值=42;//可能不安全
  输出<<"线程标识="<<本线程::取标识()<<"n";//#3
}

在另外线程访问与释放,可能不安全.
挂起协,还可再简化一下为:

空 挂起协(协程句柄<任务::承诺类型>句柄)
{
  线程(句柄).分离();
}

协程句柄是可调用的,可直接作为线程函数,句柄内部调用句柄.恢复()方法.
协待的式还可为可等待对象或函数.

动 恢复新线程()
{
  构 等待器
  {
    极 准备好协(){中 假;}
    空 挂起协(
      协程句柄<任务::承诺类型>句柄)
    {
      线程(句柄).分离();
    }
    空 恢复协(){}
  };
  中 等待器{};
}

任务 测试(){
  协待 恢复新线程();
}//典型`D`的隐藏类型了.

返回的还是等待器对象,隐藏了该局部类型,其他没啥区别.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号