c++理解协程06
Posted 周三石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++理解协程06相关的知识,希望对你有一定的参考价值。
协程状态即为完成协程暂停/恢复功能,所保存的必需状态(内存).有:承诺对象,参数,临时变量和协程句柄及可恢复帧前缀.
__内置保存协程及__挂起内置协程,为编译器内置代码,微软的_coro_系列函数,用来实现协程,通过下面来看如何实现:
实验性::协程句柄<>g_h;
构 等待者{
极 准备好协()无异{
中 假;
}
空 挂起协(实验性::协程句柄<>h)无异{
g_h=h;
}
空 恢复协()无异{}
};
元<型名...O>
中对象 测试协程(O...o){
协待 等待者();协中 1;
}
整 主(){
动&中=测试协程();
如(中.取中()==0){
g_h.恢复();
}
输出<<"协程结束."<<中.取中()<<行尾;
中 0;
}
汇编如下:
;测试协程
异或 edi,edi
移动 ecx,100h
加 rcx,28h
调用 符号 新(07FF6282C10CDh)
;在堆上分配协程帧内存
取地址 r9,[a]
;向_初化协程传递测试协程参数a
移动 双字 针[rsp+170h],edi
移动 r8,rbx
取地址 rcx,[rsp+170h]
取地址 rdx,[rax+10h]
;计算协程句柄地址.10h
取地址 rax,[b];向_初化协程传递测试协程参数b
移动 四字 针[rsp+20h],rax
调用 测试协程$_初化协程$1(07FF6282C1630h)
;调用初化协程的内置函数
10h看这里:
元<型名 _承诺型>
构 协程句柄:协程句柄<>{
静 协程句柄 从承诺(_承诺型&_提升)无异{
动 _帧针=重转<符*>(_标 的地址(_提升))+_对齐大小;
协程句柄<_承诺型>_结果;
_结果._针=重转<_可恢复帧前缀*>(_帧针);
中 _结果;
}
...
静 常 大小型 _对齐请求=的大小(空*)*2;
静 常 大小型 _对齐大小=
是空值<_承诺型>?0:((的大小(_承诺型)+_对齐请求-1)&~(_对齐请求-1));//之差.
_承诺型&承诺()常 无异{
中*常转<_承诺型*>(
重转<_承诺型 常*>(重转<符 常*>(_针)-_对齐大小));
}
};
以上是关于c++理解协程06的主要内容,如果未能解决你的问题,请参考以下文章