|
matt |
.illuminato.
Registered: Feb 2008
Posts: 187 (0.03 al dì)
Location:
Corso:
Anno:
Time Online: 2 Days, 7:43:39 [...]
Status: Offline
Edit | Report | IP: Logged |
ok, ho un dubbio sulla correzione della parte di C di questo appello
nella funzione dotprod(void *arg), si fa mutex (lock/unlock) solo quando si va a scrivere in prodval.
E tutto il resto? li non può esserci conflitto?
Per esempio, non è possibile che un thread scriva nella variabile "inizio"
un altro thread nella variabile "fine" e un altro thread ancora esegua il ciclo for con le variabili "inizio" e "fine" di sezioni che non dovrebbe calcolare lui?!?!?
cosi a vista direi che è sbagliato.... cosa non capisco?
[edit]
mhh, ho provato a eseguirlo, ed effettivamente fa i calcoli giusti.
comincia a sballare se dichiariamo le variabili "inizio" e "fine" fuori dal metodo, finche sono dentro sono locali e non globali quindi.
E' uscito fuori un altro dubbio però:
fa i calcoli giusti anche togliendo il lock e l'unlock prima e dopo la sezione critica ....
non mi sembra un caso, l'ho eseguito più volte.
idee?!
[fine edit]
[re-edit]
ok, senza il controllo mutex (lock/unlock), comincia a sballare i conti a ogni esecuzione se cominciamo a mettere un valore di lunghezza vettore più alto, per esempio
#define LUNGVET 400000
sotto questo valore, tipo il 400 dell'esercizio, non capisco se per caso o cosa, non accade mai un conflitto [fine re-edit]
Last edited by matt on 05-02-2011 at 00:46
|