由于我最初的问题被标记为因为我在一个问题中提出了两个问题,因此我将更加具体。
我想使用boost库在单个线程中进行上下文切换。因此我的计划是使用coroutines。但理想情况下,我不想更改传输参数或现有函数的函数类型。
有没有办法将产量声明为每个任务的全局变量?那么我就不会有额外的传输参数了。
#include <iostream>
#include <boost/coroutine2/all.hpp>
using namespace std;
using namespace boost::coroutines2;
void task1(coroutine<void>::push_type& yield);
void task2(coroutine<void>::push_type& yield);
coroutine<void>::pull_type coro1(task1);
coroutine<void>::pull_type coro2(task2);
void task2(coroutine<void>::push_type& yield) {
cout << "> Start task2\n";
yield();
cout << "> Continue task2\n";
yield();
cout << "> Finish task2\n";
}
void task1(coroutine<void>::push_type& yield) {
cout << "> Start task1\n";
yield();
cout << "> Continue task1\n";
yield();
cout << "> Finish task1\n";
}
int main(void) {
coro1();
coro2();
coro1();
coro2();
return 0;
}
输出:
> Start task1
> Start task2
> Continue task1
> Continue task2
> Finish task1
> Finish task2
注意:我也查看了源代码,但我不太了解模板等(我是 C++ 初学者)。也许有人已经有这个话题的经验并且可以帮助我。