Salve a tutti.
Io ho 4 thread che eseguono tutti la stessa funzione.
Per semplicità facciamo che questa funzione faccia semplicemente la somma di 2 numeri.
Ora, quello che io voglio fare è far si che in base a quale thread stia in quel momento eseguendo l'operazione, i 2 addendi siano diversi.
Per spiegarmi meglio posto un piccolo pseudo-codice:
inizio subito col dire che quel if (sei il thread ... ) funziona bene perchè comunico con i thread mediante messaggi WM_USER; quindi il thread entra solo nell'if che lo riguarda (testato).Codice PHP:
int somma(){
int a,b
if (sei il thread 1) then {
a = 1;
b = 2;
}
if (sei il thread 2) then {
a = 3;
b = 4;
}
return a+b;
}
sempre per il motivo che comunico tramite messaggi, non mi è possibile passare a e b come parametri alla funzione, quindi questa opzione anche non è da considerare.
detto questo passiamo al problema vero e proprio: facendo così, il primo thread arriva e pone a=1 e b=2; poi la cpu passa al secondo thread che pone a=3 e b=4; poi quando la cpu ritorna al primo thread, che deve ritornare la somma, lui ritorna 7 perchè di fatto la variabile è stata aggiornata dall'altro thread.
non c'è un modo per far si che ogni thread si tenga le sue variabili?
l'unica alternativa che mi è venuta è quella di fare un vettore di 8 interi, dove il thread 1 usa i primi due, il thread 2 i successivi e così via, ma mi sembra un inutile spreco di risorse...anche perchè se le variabili invece di essere 2 diventano 10 e i thread invece di 4 diventano 20, devo allocare 200 variabili al posto di 10!
Grazie mille per chi mi risponderà, spero di essere stato abbastanza chiaro