我正在尝试使用 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);
}