So che in java, se si hanno più thread che accedono a una variabile che non è marcata come volatile, si potrebbe ottenere un comportamento imprevisto.Sia la parola chiave volatile C# che java si comportano allo stesso modo?
Esempio:
private boolean bExit;
while(!bExit) {
checkUserPosition();
updateUserPosition();
}
Se si contrassegna la variabile bExit come voilatile, che avrebbe gaurantee che altri thread vedrà il valore più recente.
C# si comporta allo stesso modo?
Aggiornamento
Ad esempio, in C#, se si esegue questa operazione:
int counter = ...;
for(...)
{
new Thread(delegate()
{
Interlocked.Decrement(ref counter);
}
}
if(counter == 0)
{
// halt program
}
In quanto sopra, in C#, devi segnare la variabile del contatore come volatili o questo funzionerà come previsto?
Ogni * runtime * (modelli di memoria JVM o CLR) ha un diverso insieme di regole con alcune sovrapposizioni. Considera la ricerca di usi corretti (e non corretti) di 'volatile' in entrambe le lingue/runtime e confronti. – user2246674
Il C# volatile è davvero riservato per l'utilizzo in applicazioni a bassa memoria e dovrebbe essere utilizzato solo come ultima risorsa in assoluto per trovare una documentazione in termini di C#: http://msdn.microsoft.com/en-us /library/x13ttww7(v=vs.71).aspx – Nomad101
@ Nomad101 - Non sono sicuro di quale rapporto ci sia tra le applicazioni con memoria insufficiente e la parola chiave volatile. – hatchet