pthreadを使用して2つの行列を乗算しようとしています。マトリックス内の要素ごとに、個別のpthreadが作成されます。私のプログラムではそれを行いますが、2つの行列の要素の総数のサイズとして動的に宣言されたpthread_tの配列を使用します。
私が抱えている問題は、スレッドをうまく作成することですが、ランナー関数のテストとして、一度も実行されないように見えるcoutステートメントがあります。簡潔にするために、ファイルから2つの行列を読み取り、それらを2つの配列に格納するコードの部分を削除しました。また、2つのマトリックスの要素数をカウントし、それを使用して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);
}