que fue capaz de poner en práctica un diccionario flujos seguros en C# mediante la derivación de IDictionary y la definición de un objeto privado SyncRoot:¿Cuál es la mejor manera de implementar un diccionario seguro para subprocesos?
public class SafeDictionary<TKey, TValue>: IDictionary<TKey, TValue>
{
private readonly object syncRoot = new object();
private Dictionary<TKey, TValue> d = new Dictionary<TKey, TValue>();
public object SyncRoot
{
get { return syncRoot; }
}
public void Add(TKey key, TValue value)
{
lock (syncRoot)
{
d.Add(key, value);
}
}
// more IDictionary members...
}
entonces me bloqueo en este objeto SyncRoot lo largo de mis consumidores (múltiples hilos):
Ejemplo:
lock (m_MySharedDictionary.SyncRoot)
{
m_MySharedDictionary.Add(...);
}
yo era capaz de hacer que funcione, pero esto dio lugar a un cierto código feo. Mi pregunta es, ¿existe una forma mejor y más elegante de implementar un Diccionario seguro para subprocesos?
qué es lo que encuentran desagradable al respecto? –
Creo que se está refiriendo a todas las declaraciones de bloqueo que tiene a lo largo de su código dentro de los consumidores de la clase SharedDictionary: está bloqueando el código * de llamada cada vez que accede a un método en un objeto SharedDictionary. –
En lugar de usar el método Add, intente realizar asignando valores exm_MySharedDictionary ["key1"] = "item1", esto es seguro para subprocesos. – testuser