C++B线程调度协程
协待可帮助完成.
构 任务{
构 承诺类型{
任务 取中对象(){中{协程句柄<任务::承诺类型>::从承诺(*本)};}
从不挂起 初始挂起(){中{};}
从不挂起 止挂起()无异{中{};}
空 中空(){}
空 未处理异常(){}
};
协程句柄<任务::承诺类型>句柄_;
};
构 等待器
{
极 准备好协(){中 假;}
空 挂起协(协程句柄<任务::承诺类型>句柄)
{
线程([句柄]{句柄();}).分离();
}//在此线程执行后面
空 恢复协(){}
};//等待器.
任务 测试(){
输出<<"线程标识="<<本线程::取标识()<<"\n";//#1
协待 恢复新线程型{};
输出<<"线程标识="<<本线程::取标识()<<"\n";//#3
}
整 主(){
测试();
本线程::休息(时间::秒(2));
}
#1与#3
的输出线程标识不一样.协待
允许在另外线程
中恢复协程
,恢复点后代码
在另一线程
中执行了.
线程安全
任务 测试(共针<整>值){
输出<<"线程标识="<<本线程::取标识()<<"\n";//#1
协待 恢复新线程型{};*值=42;//可能不安全
输出<<"线程标识="<<本线程::取标识()<<"\n";//#3
}
在另外
线程访问与释放,可能不安全.
挂起协,还可再简化一下为:
空 挂起协(协程句柄<任务::承诺类型>句柄)
{
线程(句柄).分离();
}
协程句柄
是可调用
的,可直接作为线程函数,句柄内部调用句柄.恢复()
方法.
协待的式
还可为可等待
对象或函数.
动 恢复新线程()
{
构 等待器
{
极 准备好协(){中 假;}
空 挂起协(
协程句柄<任务::承诺类型>句柄)
{
线程(句柄).分离();
}
空 恢复协(){}
};
中 等待器{};
}
任务 测试(){
协待 恢复新线程();
}//典型`D`的隐藏类型了.
返回
的还是等待器
对象,隐藏了该局部类型
,其他没啥区别.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现