Definition der StrukturThread-Management in C
typedef struct {
int a,b;
}targ;
1. Thread-Funktion:
void* sum(void *arg) {
int *s;
targ *p = (targ*)arg;
int i=p->a;
int j=p->b;
*s=i+j;
pthread_exit((void*)s);
}
2. Thread-Funktion:
void* pdt(void *arg) {
int *p;
targ *s= (targ*)arg;
int i=s->a;
int j=s->b;
*p=i*j;
pthread_exit((void*)p);
}
Haupt Thread-Funktion:
int main(void) {
int ret1,ret2;
pthread_t tid1,tid2;
targ *x;
x=(targ*)malloc(sizeof(targ));
printf("enter the 2 numbers\n");
scanf("%d%d",&x->a,&x->b);
printf("%d%d",x->a,x->b);
pthread_create(&tid1,NULL,sum,(void*)x);
pthread_create(&tid2,NULL,pdt,(void*)x);
pthread_join(tid1,(void**)&ret1);
pthread_join(tid2,(void**)&ret2);
printf("the sum and product of the 2 numbers is %d and %d\n",(int)ret1, (int)ret2);
return 0;
}
Ich bin nicht in der Lage zu verstehen, warum gibt es eine segfault obwohl ich die man Seiten für jede API verfolgt habe.
Das Programm soll verstehen, wie Thread-Funktionen miteinander arbeiten. Die Hauptfunktion übergibt die Werte an jede Thread-Funktion und sie geben einen Wert an die Hauptfunktion zurück.
Sie vergeben nicht 'P' und 'S' (die ganzen Zahlen) überall, so werden sie Zeiger mit zufälligen Inhalt sein, was bedeutet, sie werden deutete auf einen zufälligen Ort im Speicher und (extrem wahrscheinlich) lösen einen segfault auf Zugang aus.Sie sollten "ret1" und "ret2" auch als int-Zeiger deklarieren, wenn Sie ihre Adresse an "pthread_join" übergeben und sie dann in "printf" dann dereferenzieren. – Siguza