私はちょうどpthreads
を使って並列プログラミングを学習し始めました。ですから、学習目的のために、私は2つの整数配列を並列に試しました。私はstruct construct
を3つの配列変数a
,b
およびc
で宣言しました。 a
、b
の追加を行い、結果をc
に保存したいと思います。ここでpthreadを使った並列プログラミング
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define MAX 6
struct data {
int a[MAX];
int b[MAX];
int c[MAX];
};
void *addition(void *index) {
struct data *d1 = (struct data *)index;
printf("value of d1 structure=%d\n", d1->a[0]);
}
int main() {
int i, j, t;
struct data *item = NULL;
pthread_t threads[MAX];
item = (struct data *)malloc(sizeof *item);
printf("enter the value for arrray a\n");
for (i = 0; i < MAX; i++) {
scanf("%d", &item->a[i]);
}
printf("enter the value of array b\n");
for (j = 0; j < MAX; j++) {
scanf("%d", &item->b[j]);
}
for (t = 0; t < MAX; t++) {
pthread_create(&threads[t], NULL, addition, (void *)&item);
}
}
、pthread_create()
に私は機能のほかに、structure
の助けを借りて、3つの引数を渡していたときに、変数a
とb
があるので、私は、機能addition()
で配列の追加を追加していない今のようコピーされません。 a
を印刷すると私にゴミ値が与えられています。誰でもpthread_create()
によって呼び出される関数の引数にstructure
変数をコピーする方法を教えてください。
'item'の種類は何の呼び出し? '&item'のタイプは何ですか?あなたがそれを知っているとき、問題は明らかでなければなりません。 –
スレッドが完了すると、処理を同期させるためにいくつかの 'pthread_join()'呼び出しが必要です。また、スレッドが機能していることを示す必要があります。あなたは、6種類のスレッドが6種類の計算を行っている様子を見せていません。彼らはデータへのアクセスを一切制御せずに、同じ計算(6つの追加と割り当て)を行っています。これは(潜在的な)トラブルの大きな原因です。ワークロードが非常に小さいためにスレッドが互いに干渉する可能性がないため、気付かないことがあります。スレッド関数は値を返すべきです - ヌルポインタ。あなたのコンパイラは文句を言うべきです! –