Se inizializzo un dizionario generico una volta e non sono consentiti ulteriori aggiunte/aggiornamenti/rimuovi, è sicuro che più thread leggano da esso senza alcun blocco (assumendo che il dizionario è inizializzato prima dell'avvio dei lettori)?Sicurezza thread di un dizionario <TKey, TValue>
C'è una nota nella guida per la HashTable non generico che dice che è sicuro per più lettori, ma non ho visto un simile non per il Dizionario generico
Just voglio assicurarmi di capire che "Anche così ..." parte del paragrafo citato correttamente. È vero che: (1) se il dizionario non sarà più modificato (come menzionato nella domanda dell'OP), anche l'enumerazione non sarà un problema. (2) se il dizionario sarà potenzialmente modificato in futuro, anche l'enumerazione 'ConcurrentDictionary' è" intrinsecamente non una procedura thread-safe ". Corretta? – RayLuo
@RayLuo: in generale non è consentito modificare una raccolta mentre un'enumerazione è "in volo" indipendentemente dal fatto che sia multithread o single threaded. –
Le raccolte di framework simultanee (ad es. 'System.Collections.Concurrent.ConcurrentDictionary') generalmente consentono modifiche durante l'enumerazione. Tuttavia, lo fanno facendo una copia della collezione e facendoti elencare la copia. E l'intera raccolta è bloccata mentre viene eseguita la copia. Un ingegnere del framework potrebbe obiettare che questo significa che non stai modificando la raccolta mentre l'enumerazione è "in volo" (poiché sotto il cofano, l'intera cosa era bloccata mentre l'enumerazione era "in volo"), ma dalla prospettiva di un utente quadro , l'elenco è in volo. – Brian