Hallo liebe Community,
ich habe die Aufgabe im Folgenden Code eine Race-Condition zu finden und diese zu beheben. Ich denke ich habe die Fehler gefunden, allerdings weiß ich nicht wie ich die Fehler im Code verbessern soll. Kann mir da jemand vielleicht helfen?
Danke schonmal 
ich habe die Aufgabe im Folgenden Code eine Race-Condition zu finden und diese zu beheben. Ich denke ich habe die Fehler gefunden, allerdings weiß ich nicht wie ich die Fehler im Code verbessern soll. Kann mir da jemand vielleicht helfen?
C:
#include <stdlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#define SIZE 100int
a = 0, b = 0, sum = 1;
void* fnc1(void* data){
srand(((int*)data)[0]); //hat nicht für jeden pthread einen gesonderten Speicherbereich
for(int i = 0; i < 100; i++) {
a = rand(); //rand_r verwenden
usleep(2500);
b = rand(); //rand_r verwenden
usleep(2500);
sum += a*b; //nicht egal in welcher Reihenfolge die rand aufrufe erfolgen, kann man aber nicht vorhersagen
}
return NULL;
}
int main(int argc, char** argv){
pthread_t threads[SIZE];
int index[SIZE];
for(int i = 0; i < SIZE; i++) {
index[i] = i;
pthread_create(&threads[i], NULL, fnc1, &index[i]);
}
for(int i = 0; i < SIZE; i++) {
pthread_join(threads[i], NULL);
}
printf("sum %d\n", sum);
return 0;
}