Array von Struct

Hi,

also in dem unten angegebenen Quellcode soll eine Matrix berechnet werden nxn wobei auf Mutex und Sem verzichtet werden soll. Die loesung soll ueber ein Struct gemacht werden. Jetzt bleibt mir ja nur noch die Wahl fuer jeden Thread eine Stuctur zu uebergeben. Nur wie macht man das? Ich habe es so versucht nur so gehts net :wink: kann mir jemand helfe?

 /\*  
 \* matrix\_vector\_serial.c  
 \*  
 \* A simple matrix multiplication program  
 \* (Matrix A x Vector b) =\> Vector c   
 \*/  
  
#include   
#include   
#include   
  
#define ARRAY\_SIZE 10   
  
typedef int matrix\_t[ARRAY\_SIZE][ARRAY\_SIZE];  
typedef int vector\_t[ARRAY\_SIZE];  
  
void mult(struct TheMatri\*[]);  
  
struct TheMatrix{  
 int row;  
 matrix\_t A;  
 vector\_t b;  
 vector\_t c;  
};  
  
/\*  
 \* Main: allocates matrix, assigns values, computes the results  
 \*/  
int main()   
{  
 int row, col;  
 int threadOK=0;  
 int threadJoin=0;  
 struct TheMatrix all[ARRAY\_SIZE];  
 pthread\_t threadIt[ARRAY\_SIZE];  
  
 /\* Fill in matrix values, currently values are hardwired \*/  
 for (row = 0; row row[all-\>row]-\>A[all-\>row[all-\>row][pos]] \* all[all-\>row]-\>b[pos];  
 }  
 all[all-\>row]-\>c[all[all-\>row]-\>row] = t;  
}  
  

Danke Pfefferkeks

Hallo,

Die loesung soll ueber ein Struct gemacht werden.

Das ist ok.

Jetzt bleibt mir ja nur noch die Wahl fuer jeden Thread eine Stuctur
zu uebergeben. Nur wie macht man das? Ich habe es so versucht
nur so gehts net :wink: kann mir jemand helfe?

Dein Experiment „Feld von Struct mit Feldern drin“
ist ziemlich gescheitert. Ich frage mich, wie man
es hinbekommt, eine solche doch recht umfangreiche
Routine zu schreiben, obwohl diese von Anfang an
nicht funktioniert haben kann.

Hmmm…

void mult(struct TheMatri x *[]);

Feld von Zeigern auf struct, hehe! Lange nicht
gesehen :wink: Oder sollte das ein Zeiger auf
ein Feld von structs werden?

/* Fill in matrix values, currently values are hardwired */
for (row = 0; row for (mat = 0; mat oder nicht?

/* Threads starten */
for (row=0; row all[row].row = row;

So funktioniert das nicht. Versuche bitte mal eine
Matrix in einer struct und in einem extra Thread.

Wenn das funktioniert, überlegst Du Dir, warum das
funktioniert. Dann versuchst Du den Fall zu erweitern -
auf ein Feld von Strukturen.

void mult(struct TheMatrix* all[]) {

int pos, t;

t = 0;
for(pos = 0; pos row[all->row]->A[all->row[all->row][pos]]
* all[all->row]->b[pos];
}

Feld von Zeigern oder Zeiger auf ein Feld?
Was hast Du hier vor?

Grüße

CMБ