C++ 从多个c++;QThreads

C++ 从多个c++;QThreads,c++,c,multithreading,qt,stack,C++,C,Multithreading,Qt,Stack,我想用QThread通过一个c代码函数来处理数据。为此,我构建了一个接口,将函数指针和指向数据部分的指针传递给每个线程 例如: 数据是4个浮点数。该函数应该将第一个浮点数与第二个浮点数相乘,第三个浮点数与第四个浮点数相乘。 现在我在C++中创建了两个QPult,并将函数指针以及第一个和第二个元素的指针传递给第一个Q线程。然后我将函数指针以及指向第三个和第四个元素的指针传递给第二个QThread 对于具有24个逻辑内核和24个不同创建线程的系统,我希望性能提高近24倍,但性能提升仅为20% 我的理

我想用QThread通过一个c代码函数来处理数据。为此,我构建了一个接口,将函数指针和指向数据部分的指针传递给每个线程

例如: 数据是4个浮点数。该函数应该将第一个浮点数与第二个浮点数相乘,第三个浮点数与第四个浮点数相乘。 现在我在C++中创建了两个QPult,并将函数指针以及第一个和第二个元素的指针传递给第一个Q线程。然后我将函数指针以及指向第三个和第四个元素的指针传递给第二个QThread

对于具有24个逻辑内核和24个不同创建线程的系统,我希望性能提高近24倍,但性能提升仅为20%

我的理论是,不同的线程试图访问相同的函数地址,并使彼此的速度减慢。对吗?如何为每个线程创建该函数的多个副本

我试图破解一些伪代码。请不要杀我我显然没有真正的编程背景:

包含要线程化的函数的c文件
float*数据;
内螺纹;
setFunctionInterface(&functionToThread、data、thread);
void functionToThread(浮点*数据,int线程){
SomeIPFunction(数据[线程])
}
C到C++接口文件
void setFunctionInterface(void(*func)(浮点*数据,int线程),数据,线程){
setFunction(函数、数据、线程);
}
C++线程管理器
void setFunction(函数、数据、线程){
threadManager->getThread(thread)->threadSetFunction(func,data,thread);
}
void QThread::threadSetFunction(函数、数据、线程){
}
void QThread::run(){
while(true)
{
如果(somemutexthatchecksifjobistobexecuted()){
(*func)(数据,iThread);
}
}
}

为什么需要让代码变慢?根据对函数功能的描述,使用任何线程都将对性能和代码可维护性有害。请提供您需要并行化的实际代码,解释为什么您认为多线程是一个好的解决方案。然后,我将函数指针以及指向第三个和第四个元素的指针传递给第二个QThread。Noooooo:(将您的所有数据分成24个大数据块,而不是大量的小数据块!有许多问题可能会导致您的问题,包括(但不限于)cahcing、数据或I/O或CPU争用、线程间同步等等。@MarekR代码几乎不相关,只有数据才重要。大块数据,彼此不共享缓存线,非常适合线程化。@MartinJames代码很重要,看看他的实际问题是什么。对我来说,这个问题闻起来像XY问题。