0

由于我最初的问题被标记为因为我在一个问题中提出了两个问题,因此我将更加具体。

我想使用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++ 初学者)。也许有人已经有这个话题的经验并且可以帮助我。

4

0 回答 0