• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Race-Condition beheben?!

J

JavaKev

Mitglied
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?
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;
}
Danke schonmal :)
 
Anzeige

Neue Themen


Oben