【发布时间】:2012-12-16 13:05:47
【问题描述】:
我想要tbb::task_group 之类的东西,但要保证订单执行的不同,例如
serial_task_group tasks;
tasks.run([]{std::cout << 1;});
tasks.run([]{std::cout << 2;});
tasks.run([]{std::cout << 3;});
tasks.wait();
// guaranteed output: 123
关于如何使用 tbb 实现这一点的任何建议?
目前我有一个显式线程,它只使用条件变量从队列中执行。但是,使用队列的问题是我将如何保证 task_group 中只有一个任务处于活动状态。
【问题讨论】:
-
我真的看不出你想要归档什么。如果我理解正确,您只希望按顺序执行任务,并且一次只执行一项。但在这种情况下,我看不出你需要
task_group做什么。如果您没有并发执行,您可以直接在调用线程/函数中执行您需要的任何操作,而不是委托给task-结构。关于您问题的最后一部分:如果您只有一个线程执行任务,一次如何激活多个任务? -
@Grizzly:我还有很多其他并发的事情要做。但是,我想在这里运行的特定计算需要按顺序运行并且非常繁重。如果我使用显式线程,而不是使用任务调度程序,由于超额订阅,我会有相当多的开销。我的目标是在任务调度程序中运行所有内容。
-
你看过tbb流程图吗?在 Windows 上,代理库很容易做到这一点,在 tbb 流图是最接近的等价物。
标签: c++ concurrency tbb