Ich habe gerade angefangen zu lernen parallele Programmierung mit pthreads
. Also, für den Lernzweck habe ich die Summe zweier Integer-Arrays parallel ausprobiert. Ich habe struct construct
mit drei Array-Variablen a
, b
und c
deklariert. Ich möchte hinzufügen a
, b
und speichern Sie das Ergebnis in c
.Parallele Programmierung mit 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);
}
}
Hier, wie jetzt ich habe nicht die Zugabe von Arrays in der Funktion addition()
, weil in pthread_create()
hinzugefügt, wenn ich die drei Argumente mit Hilfe von structure
, in Funktion hinaus bin vorbei die Variablen a
und b
sind nicht kopiert werden. Drucken a
gibt mir Müllwert. Kann jemand mir helfen, wie man die structure
Variable zum Funktionsargument kopiert, das durch pthread_create()
angerufen wird.
Was ist die Art von 'item'? Was ist der Typ von '& item'? Wenn Sie das wissen, sollte das Problem offensichtlich sein. –
Sie benötigen einige 'pthread_join()' Aufrufe, um die Verarbeitung beim Beenden der Threads zu synchronisieren. Sie müssen auch zeigen, dass die Threads funktioniert haben. Sie haben nicht gezeigt, wie Ihre 6 verschiedenen Threads 6 verschiedene Berechnungen durchführen. Sie machen alle die gleiche Berechnung (6 Additionen und Zuweisungen) ohne Kontrolle über den Zugriff auf die Daten. Dies ist eine Hauptursache für (potentielle) Probleme. Sie werden es möglicherweise nicht bemerken, weil die Arbeitslast so gering ist, dass die Threads nie die Chance bekommen, sich gegenseitig zu stören. Die Thread-Funktion sollte einen Wert zurückgeben - einen Nullzeiger. Dein Compiler sollte sich beschweren! –