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

Multithreading C+中的嵌套线程+;11多线程编程,multithreading,c++11,Multithreading,C++11,首先,我创建了四个线程,每个线程将调用一个GPU函数。但是,在这四个线程中,我还想创建两个线程。一个是从磁盘读取数据,另一个是进行计算。我不确定是否可以在C++中创建嵌套线程。我认为这不是一个整洁的代码。我可以用其他方法来解决这个问题吗?一般来说,从正在运行的线程创建一个新线程应该没有问题。 就像你认为这不是最好的解决方案一样,因为创建/销毁线程通常并不便宜,而且线程越多,上下文切换就越多,这也是或可能是一种性能损失 因此,您可以创建一个线程池,该线程池具有给定数量的线程,并允许线程池线程从磁盘

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

一般来说,从正在运行的线程创建一个新线程应该没有问题。 就像你认为这不是最好的解决方案一样,因为创建/销毁线程通常并不便宜,而且线程越多,上下文切换就越多,这也是或可能是一种性能损失

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


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

您可以使用std::async,完全取消线程管理。或者使用一种混合方法,其中有4个核心线程,我认为它们永远不会消亡,然后在那些希望执行更多异步工作的函数中,可以使用std::async

不清楚异步任务是否使用线程池。如果您希望确保高性能,这可能是您在使用GPU时所关心的,那么您应该使用线程池


哪个线程正在创建新线程并不重要。一个进程的线程不会形成一棵树,没有嵌套,它是扁平的。Re,“我认为这不是一个整洁的代码”,那么,到目前为止,你是唯一看到它的人。如果你不在这里展示的话,你不会得到任何有意义的意见。