Domanda

Sto usando ArrayList statico in una classe per memorizzare informazioni sui campi del database non aggiornabili. Sto programmando di inizializzarlo nel costruttore una volta (chiamata al metodo init protetta da lock nel costruttore). Dopo che più thread controllano se l'arraylist contiene un campo. Devo controllare questo accesso in lettura in qualche modo? Ad esempio chiamando ArrayList.Synchronized.

È stato utile?

Soluzione

No (e non dovresti farlo quando lo crei finché lo fai nel static costruttore, che ha un blocco implicito multithread - se non sei in grado di farlo, probabilmente vorrai bloccare). C'è un ReaderWriterLockSlim se puoi usare per controllare l'accesso se finisci per dover accedere R / W.

Altri suggerimenti

No. La sincronizzazione è richiesta solo per gli oggetti con stato in cui si intende cambiare lo stato.

No, finché stai leggendo puoi semplicemente averlo.

No, ma prendi in considerazione l'idea di inserirlo in un ReadOnlyCollection per assicurarsi che nessuno dei thread possa modificarlo.

Modifica: tuttavia, per fare ciò, dovrai rendere l'elenco un List<T> anziché un ArrayList.

Per la creazione iniziale del tuo Elenco potresti prendere in considerazione l'utilizzo di un costruttore statico. Questo verrà chiamato solo una volta sul primo riferimento al tipo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top