Multithreading join in linguaggio C – Migliorato

Ho deciso di apportare un piccolo miglioramento del codice dell’articolo precedente per poter sfruttare ad ogni lancio del dado sempre lo stesso blocco di codice per generare un numero random. Di seguito è riportato il codice in linguaggio C.

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <time.h>
 
int parametroOUT[5];
void* codice(int val){
    srand(time(NULL)+val);
    parametroOUT[val] = (rand() % 6)+1;
    pthread_exit((void*) &parametroOUT[val]);
}
 
int main(){
    int *risultato[5];
    pthread_t t1,t2,t3,t4,t5;
    pthread_create(&t1, NULL, codice, 0);
    pthread_create(&t2, NULL, codice, 1);
    pthread_create(&t3, NULL, codice, 2);
    pthread_create(&t4, NULL, codice, 3);
    pthread_create(&t5, NULL, codice, 4);
    pthread_join(t1, (void*) &risultato[0]);
    pthread_join(t2, (void*) &risultato[1]);
    pthread_join(t3, (void*) &risultato[2]);
    pthread_join(t4, (void*) &risultato[3]);
    pthread_join(t5, (void*) &risultato[4]);
    printf("primo dado estratto: %d\n", *risultato[0]);
    printf("secondo dado estratto: %d\n", *risultato[1]);
    printf("terzo dado estratto: %d\n", *risultato[2]);
    printf("quarto dado estratto: %d\n", *risultato[3]);
    printf("quinto dado estratto: %d\n", *risultato[4]);
    return 0;
}