C++ pthread数组

C++ pthread数组,c++,pthreads,C++,Pthreads,我正在尝试使用pthread将两个矩阵相乘。对于矩阵中的每个元素,将创建一个单独的pthread。在我的程序中,我这样做了,但使用pthread_t数组,动态声明为两个矩阵中元素总数的大小 我遇到的问题是,我创建的线程很好,但是作为我的runner函数中的一个测试,我有一个cout语句,它似乎没有执行一次。为了简洁起见,我删除了代码中从文件中读取两个矩阵并将它们存储到两个数组中的部分。它还计算两个矩阵中的元素数,并使用它设置pthread数组的大小。我已经分别测试了该代码,所以我很确定这与我的问

我正在尝试使用pthread将两个矩阵相乘。对于矩阵中的每个元素,将创建一个单独的pthread。在我的程序中,我这样做了,但使用pthread_t数组,动态声明为两个矩阵中元素总数的大小

我遇到的问题是,我创建的线程很好,但是作为我的runner函数中的一个测试,我有一个cout语句,它似乎没有执行一次。为了简洁起见,我删除了代码中从文件中读取两个矩阵并将它们存储到两个数组中的部分。它还计算两个矩阵中的元素数,并使用它设置pthread数组的大小。我已经分别测试了该代码,所以我很确定这与我的问题无关

以下是与我的问题相关的代码:

int main(int argc, char **argv)
{
pthread_attr_t attr;
pthread_t *workers;
workers = new pthread_t[numThreads];
int counter = 0;
for(int count1 = 0; count1 < (rows2 * cols2); count1++)
{
    infile2 >> array2[count1];
}
for(int i = 0; i < rows1; i++)
{
    for(int j = 0; j < cols1; j++)
    {
        location *data = new location;
        data->row = i;
        data->col = j;
        pthread_create(&(workers[counter]), &attr, runner, data);
        counter++;
    }
}
for(int i = 0; i < rows2; i++)
{
    for(int j = 0; j < cols2; j++)
    {
        location *data = new location;
        data->row = i;
        data->col = j;
        pthread_create(&(workers[counter]), &attr, runner, data);
        counter++;
    }
}
for(int add = 0; add < 24; add++)
{
    pthread_join(workers[add], NULL);
}
return 0;
}
int main(int argc,char**argv)
{
pthread_attr_t attr;
pthread_t*工人;
workers=newpthread_t[numThreads];
int计数器=0;
对于(int count1=0;count1<(行2*cols2);count1++)
{
填充2>>阵列2[count1];
}
对于(int i=0;i行=i;
数据->col=j;
pthread_create(&(workers[counter]),&attr,runner,data);
计数器++;
}
}
对于(int i=0;i行=i;
数据->col=j;
pthread_create(&(workers[counter]),&attr,runner,data);
计数器++;
}
}
对于(int add=0;add<24;add++)
{
pthread_join(workers[add],NULL);
}
返回0;
}
我的跑步功能:

void *runner(void *param)
{
    cout << "bob" << endl;
    pthread_exit(NULL);
}
void*runner(void*param)
{

您是否可以在实际代码中的任何地方初始化
pthread\u attr
?如果不使用
pthread\u attr\u init()
,或者如果不使用它,则将其作为NULL传递。看起来
pthread\u create
失败,参数“无效”。此外,如果您在实际代码中还没有这样做,请检查所有返回代码。Pthread参数成功时返回0,失败时返回正整数。

是的,这解决了问题。我将向函数传递attr的部分更改为NULL,cout语句正常工作。