C++ 如何始终让尽可能多的线程与内核数同时运行?

C++ 如何始终让尽可能多的线程与内核数同时运行?,c++,multithreading,parallel-processing,pthreads,C++,Multithreading,Parallel Processing,Pthreads,我有一个点的向量。每个点都是n维向量。 我得了k=100分。 我必须为每个点计算多个变量的几个函数的值。 之后,我将结果写入txt文件 我有4个核。我使用多线程来完成这个任务。我只想 4个线程同时运行。 我的线程几乎是独立的。它们只共享一种资源。txt文件。 每个线程在末尾写入结果。 我使用互斥体写入此文件 现在我有了下一个解决方案: for (int i = 0; i < k; k+=number_of_threads){ // create 4 threads // start fu

我有一个点的向量。每个点都是n维向量。 我得了k=100分。 我必须为每个点计算多个变量的几个函数的值。 之后,我将结果写入txt文件

我有4个核。我使用多线程来完成这个任务。我只想 4个线程同时运行。 我的线程几乎是独立的。它们只共享一种资源。txt文件。 每个线程在末尾写入结果。 我使用互斥体写入此文件

现在我有了下一个解决方案:

for (int i = 0; i < k; k+=number_of_threads){
// create 4 threads

// start function for each 4 threads

// join thread 1
// join thread 2
// join thread 3
// join thread 4
}
for(int i=0;i
问题是直到每个线程结束,新线程才会启动。 这很有效。但我认为有一个更好的解决办法

如何在一个线程完成后立即启动新线程? 我希望同时只运行4个线程(4是核心数)
顺便说一下,我正在使用pthreads。

顺序重要吗?如果不只是将数据集分成4个相等的部分,让每个线程处理一个数据块,问题是k值可能会改变。。。有没有办法在其中一个线程完成后添加新线程?有很多方法,但都需要时间。你能把数据集分成
k
等份吗?然后你可以每件有一个线程。这是一个地狱般的计算来证明在一个txt文件上多线程是正确的。如果你真的必须这样做的话,怎么样