Ho una variabile globale condivisa e che viene aggiornata 5 volte da ciascuno dei 5 thread generati. Come per la mia comprensione l'operazione di incremento è composto da 3 istruzioniValore minimo e massimo possibile di una variabile condivisa quando incrementato da più thread
load reg, M
inc reg
store reg, M
Quindi voglio chiedere che in questo scenario che cosa sarebbe il valore massimo e minimo dato interleaving arbitraria nei 5 filetti.
Quindi secondo me il valore massimo sarà 25 (sono sicuro al 100% che può essere superiore a 25) e il valore minimo è 5. Ma non sono così sicuro sul valore minimo. Può essere inferiore a 5 in qualche interleaving arbitrario? Qualsiasi input sarà molto apprezzato.
/* Global Variable */
int var = 0;
/* Thread function */
void thread_func()
{
for(int c = 0; c < 5; c++)
var++;
}
perché stai tentando di aggiornare una variabile "globale" senza blocco? –
@Mitch Wheat rende una domanda teorica più "interessante"? –