2

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

我遇到的问题是我创建的线程很好,但是作为我的运行器函数中的一个测试,我有一个 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;
}

和我的跑步者功能:

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

1 回答 1

3

pthread_attr您是否在真实代码中的任何地方进行了初始化?如果您不使用它,则不使用pthread_attr_init()或将其作为 NULL 传递。看起来pthread_create因为“无效参数”而失败。此外,如果您尚未在真实代码中这样做,请检查所有返回代码。Pthread 参数在成功时返回 0,在失败时返回正整数。

于 2012-10-05T04:39:27.957 回答