gpt4 book ai didi

c++ - 基于开关的协程

转载 作者:太空狗 更新时间:2023-10-29 21:42:56 27 4
gpt4 key购买 nike

我知道 C 和 C++ 中协程的习惯用法或模式:

struct cofunctor {
int state = 0;

void operator () () {
switch ( state ) {
case 0: // Caller must initialize to 0

if ( bar1 ) return;

while ( bar2 ) {
state = 1; case 1:

if ( bar3 ) return;

state = 2; case 2:

if ( bar4 ) return;
}
state = 3; case 3:
return;
}
}
};

当函数执行时,它会更新持久检查点变量。下次调用时,该值用于跳转到执行的中间。在实践中,检查点将不仅仅是一个 int,而是包含“局部”变量。

我正在用 C++ 编写。我的用例很少产生结果,所以我只想在异常处理期间更新检查点。

这种模式在实际实践中是否为人所知,还是仅作为好奇记录在案? C++ 中是否存在可重用的实现?

(据我所知,Boost.Coroutine 使用不一致的堆栈 hack,与 longjmp 多线程不同。我的应用程序很少使用协程控制流,堆栈使用率可能在众多“线程”,所以它不适合这样的实现。)

最佳答案

Does a reusable implementation exist in C++?

This article还谈到一个one header ,驻留在 Boost.ASIO 库中的无堆栈实现。

Another ASIO header 似乎表明他们比之前的状态更进了一步,但我对这个了解不多。可能与上次相同,也可能不同。

关于c++ - 基于开关的协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24202890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com