C ++ 11多线程编程中的嵌套线程

时间:2019-01-22 05:59:03

标签: multithreading c++11

首先,我创建四个线程,每个线程将调用一个GPU函数。但是,在这四个中的每个中,我还想创建两个线程。一种是从磁盘读取数据,另一种是进行计算。我不确定是否可以在C ++中创建嵌套线程。我认为这不是一个整洁的代码。我可以用另一种方法解决问题吗?

2 个答案:

答案 0 :(得分:1)

通常,从正在运行的线程创建新线程应该没有问题。 就像您认为这不是最佳解决方案一样,因为创建/销毁线程通常并不便宜,并且线程越多,您拥有的上下文切换就越多,这可能或也可能会降低性能。

因此,您可以创建一个具有给定数量的线程的线程池,并使该线程池线程能够从磁盘读取数据并进行计算。您将避免大量创建和销毁线程。

如果您还经常创建/销毁调用GPU函数的线程,则可以创建两个线程池,一个用于调用GPU函数的线程,一个线程池用于读取磁盘和计算。

答案 1 :(得分:0)

您可以使用std :: async并完全取消线程管理。或使用混合方法,在该方法中,我假设4个核心线程永远不会消失,然后在希望执行更多异步工作的函数中,可以使用std :: async。

https://solarianprogrammer.com/2012/10/17/cpp-11-async-tutorial/

不清楚异步任务是否正在使用线程池。如果您想确保高性能(由于使用GPU而可能在意),则应使用线程池。

http://roar11.com/2016/01/a-platform-independent-thread-pool-using-c14/