Se ho una variabile locale in questo modo:sicurezza Discussione e le variabili locali
Increment()
{
int i = getFromDb(); // get count for a customer from db
};
E questa è una classe istanza che viene incrementato (ogni volta che un cliente - un oggetto istanza - fa un acquisto), è questo thread variabile sicuro? Ho sentito che le variabili locali sono thread-safe perché ogni thread ha il suo stack, ecc. Ecc.
Inoltre, ho ragione nel pensare che questa variabile sia condivisa? Quello che mi manca nel reparto di pensiero è che questa variabile funzionerà con diversi oggetti del cliente (ad es. John, Paul, ecc.) Quindi è thread-safe, ma questo è un pensiero imperfetto e un po 'di inesperienza nella programmazione concorrente. Questo suona molto ingenuo, ma poi non ho molta esperienza nella codifica simultanea come faccio in generale, la codifica sincrona.
EDIT: Inoltre, la funzione chiamata getFromDb() non fa parte della domanda e non mi aspetto che nessuno possa indovinare sulla sicurezza del thread in quanto è solo una chiamata per indicare che il valore viene assegnato da una funzione che ottiene dati dal db. :)
EDIT 2: Inoltre, la sicurezza del thread getFromDb è garantita poiché esegue solo operazioni di lettura.
+1 per completezza (discussione sui metodi anon e sui blocchi iteratori. Le classi statiche e la sicurezza del thread sono il concetto più semplice da comprendere, personalmente.) – dotnetdev
IMHO, è importante chiarire che anche nelle eccezioni elencate, la variabile locale è _still_ unico per ogni chiamata al metodo. Cioè, mentre è possibile accedervi al di fuori del contesto del metodo, anche potenzialmente in modalità non thread-safe, saranno comunque thread-safe rispetto alla variabile locale _same_ nel contesto di una chiamata _different_ allo stesso metodo . –