2016-12-30 53 views
1

是否有任何方法来设置可以通过使用异步函数(从未来)创建的最大线程数量? 我更喜欢使用async/future.get,因为它可以转换为同步/产生多任务模型,这在Alghoritms(即Cormen)的教科书中是常见的 。我希望能够获得T [p](使用p处理器/线程完成程序的时间)。使用C++异步并行编程async

+0

如果对成员函数的调用次数高于您在构建类实例时可能指定的某个限制,那么您可以将所有调用放入类中的方法中,以避免执行任何操作。如果达到或超过限制,您希望程序执行什么操作? –

+0

快速且肮脏的解决方案:将信号量初始化为您希望一次执行的线程数。让你的线程程序等待这个信号量。这并不能让你摆脱线程创建的开销,但至少任何额外的线程都会安静地转动。 – Davislor

+0

或者:有一个原子(优先级)队列,并让你的池中的工作线程从队列中获得他们的下一个任务,但你已经表示你宁愿做同步/产生。 – Davislor

回答

2

不幸的是没有。 std::async在它为您提供如何创建线程的控件上的声名远播受到限制。

您可能会考虑使用boost线程池。这是(有点直观上)boost asio的一部分,并使用一个io_service对象,即使/如果您实际上没有将它用于I/O。

使用此功能可以很容易地控制使用的线程数量,包括只使用一个。

当然,您可以从标准组件构建您自己的线程池类。当然可能,但不是完全平凡的任务。