Pregunta

Me gusta la operación sin bloqueo del concurrentdictionyy y úsalo enDos objetos:

 ConcurrentDictionary<datetime,myObj> myIndexByDate
 ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index

Estos dos objetos deben permanecer en sincronización.¿Es la única forma de hacerlo es usar un bloqueo, evitando así todos los beneficios del diccionario concurrente?

¿Fue útil?

Solución

Crearía una clase personalizada con 2 diccionarios y usaría un bloqueo solo en los métodos que son susceptibles de cambiar el diccionario (agregar, eliminar).

No pierde los beneficios del diccionario concurrente, ya que este método requiere mucho menos código de lo que tendría que hacer usando el diccionario normal.

Otros consejos

ConcurrentDictionary es solo "Safe Safe" en las operaciones en una instancia particular.p.ej.Mientras se está invocando una llamada de concurrentesDicticionary.tryadd (), no se pueden modificar otros hilos de la colección ...

Esto no significa que mientras obtenga un valor de un diccionario y agréguelo a otro diccionario que aún existe el valor en el diccionario original mientras lo agregue al segundo.

Probablemente tenga un invariante de que los detalles de los que mientras está moviendo un valor de un diccionario al otro, no se puede eliminar valores en el diccionario original (o al menos ese valor , pero eso esUn poco más difícil de garantizar con incorporación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top