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的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段 C++ 的说明

c++理解协程03

c++理解协程05

C++ 代码片段执行

如何理解这段代码片段中的两对括号?

从无栈协程到 C++异步框架