Cómo obtener acceso sincronizado a HybridDictionary en C#

La propiedad HybridDictionary.SyncRoot se usa para obtener un objeto que se puede usar para sincronizar el acceso al HybridDictionary . Implementa una lista enlazada y una estructura de datos de tabla hash. Implementa IDictionary usando ListDictionary cuando la colección es pequeña y Hashtable cuando la colección es grande.

Sintaxis: objeto virtual público SyncRoot { get; }

Valor de propiedad: un objeto que se puede usar para sincronizar el acceso al HybridDictionary.

Puntos importantes:

  • La sincronización de un objeto se realiza de modo que solo un subproceso pueda manipular los datos en HybridDictionary.
  • Una propiedad es miembro de una clase que proporciona un medio para leer, escribir y calcular campos de datos privados.
  • El código de sincronización no puede actuar directamente en la colección, por lo que debe realizar operaciones en el SyncRoot de la colección para garantizar el correcto funcionamiento de las colecciones que se derivan de otros objetos.
  • Recuperar el valor de esta propiedad es una operación O(1).

Los siguientes programas ilustran el uso de la propiedad discutida anteriormente:

Ejemplo 1: en este código, usamos SyncRoot para obtener acceso sincronizado al HybridDictionary llamado hd , que no es un procedimiento seguro para subprocesos y puede causar una excepción. Entonces, para evitar la excepción, bloqueamos la colección durante la enumeración.

// C# program to illustrate the
// use of SyncRoot property of
// the HybridDictionary class
using System;
using System.Threading;
using System.Collections;
using System.Collections.Specialized;
  
namespace sync_root {
  
class GFG {
  
    // Main Method
    static void Main(string[] args)
    {
  
        // Declaring an HybridDictionary
        HybridDictionary hd = new HybridDictionary();
  
        // Adding elements to HybridDictionary
        hd.Add("1", "HTML");
        hd.Add("2", "CSS");
        hd.Add("3", "PHP");
        hd.Add("4", "JQuery");
        hd.Add("5", "JavaScript");
  
        // Using the SyncRoot property
        lock(hd.SyncRoot)
        {
            // foreach loop to display
            // the elements in hd
            foreach(DictionaryEntry i in hd)
                Console.WriteLine(i.Key + " ---- " + i.Value);
        }
    }
}
}
Producción:

1 ---- HTML
2 ---- CSS
3 ---- PHP
4 ---- JQuery
5 ---- JavaScript

Ejemplo 2:

// C# program to illustrate the
// use of SyncRoot property of
// the HybridDictionary class
using System;
using System.Threading;
using System.Collections;
using System.Collections.Specialized;
  
namespace sync_root {
  
class GFG {
  
    // Main Method
    static void Main(string[] args)
    {
  
        // Declaring an HybridDictionary
        HybridDictionary hd= new HybridDictionary();
  
        // Adding elements to HybridDictionary
        hd.Add("10", "Shyam");
        hd.Add("20", "Ram");
        hd.Add("30", "Rohit");
        hd.Add("40", "Sohan");
        hd.Add("50", "Rohan");
  
        // Using the SyncRoot property
        lock(hd.SyncRoot)
        {
            // foreach loop to display
            // the elements in hd
            foreach(DictionaryEntry i in hd)
                Console.WriteLine(i.Key + " ----> " + i.Value);
        }
    }
}
}
Producción:

10 ----> Shyam
20 ----> Ram
30 ----> Rohit
40 ----> Sohan
50 ----> Rohan

Referencia:

Publicación traducida automáticamente

Artículo escrito por Kirti_Mangal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *