Sto pianificando di creare l'elenco una volta in un costruttore statico e quindi disporre di più istanze di tale classe di leggerlo (ed eseguire enumerazioni attraverso esso) contemporaneamente senza eseguire alcun blocco.Sicurezza filo dell'elenco C# <T> per i lettori
In questo articolo http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx MS descrive il problema della sicurezza dei thread come segue:
statici pubblici (Shared in Visual Basic) membri di questo tipo sono thread-safe. Qualsiasi membro di istanza non è garantito come thread-safe.
Un elenco può supportare contemporaneamente più lettori , a condizione che la raccolta non venga modificata. L'enumerazione tramite una raccolta è intrinsecamente non una procedura thread-safe . Nel raro caso in cui un'enumerazione contenda uno o più accessi di scrittura , l'unico modo per garantire la sicurezza del thread consiste nel bloccare la raccolta durante l'intera enumerazione . Per consentire alla collezione di accedere a più thread per la lettura e scrittura , è necessario implementare la propria sincronizzazione.
"L'enumerazione tramite una raccolta non è intrinsecamente una procedura thread-safe". L'affermazione è ciò che mi preoccupa.
Ciò significa che è thread-safe per lo scenario solo lettori, ma finché non si utilizza l'enumerazione?
O è sicuro per il mio scenario?
Grazie per le risposte. Perché ho bisogno di usare AsReadOnly affatto se funzionerà con o senza?
Per "non condividere IEnumeratori tra thread", si intende "non accedere ** alla stessa istanza di enumeratore ** da più thread"? –
@EugeneBeresovksy: Esattamente. – SLaks