salve ragazzi.
ho un piccolo codice che crea un certo numero di threads. ( pari al numero di elementi presenti in una matrice bidimensionale NxN )
alla funzione che eseguirò come threads mi serve passare 2 elementi interi (che altro non sono i 2 indici i e j degli elementi della matrice )
questo è il semplice codice:
codice:
struct arrayIndexes {
int i,j;
};
void *myThreadFunc(void *arg) {
struct arrayIndexes myAI = *((struct arrayIndexes *)arg);
// alcune operazioni...
}
void main() {
struct arrayIndexes myAI;
for(i=0;i<n;i++)
for(j=0;j<n;j++) {
myAI.i=i; myAI.j=j;
pthread_create(&(threads[i][j]),NULL,myThreadFunc,&myAI);
sleep(1);
}
}
come vedete faccio i*j pthread_create, mi salvo l'indice corrente nella struct myAI e lo passo come argomento alla funzione (cosi i vari thread avranno un indice preciso su cui lavorare).
Il problema è che ho dovuto aggiungere quella sleep perchè altrimenti le funzioni prendevano dei valori "accavallati" dall'argomento myAI.
(Probabilmente per motivi causati dallo scheduler)
c'è un modo per evitare di usare la sleep?