Race-Condition beheben?!

Diskutiere Race-Condition beheben?! im C/C++ Bereich.
J

JavaKev

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 :)
 
Thema: 

Race-Condition beheben?!

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben