C# | Creación de un contenedor sincronizado (seguro para subprocesos) para Hashtable

El método Hashtable.Synchronized(Hashtable) se usa para devolver un contenedor sincronizado (seguro para subprocesos) para Hashtable .
Sintaxis:

System.Collections.Hashtable público estático sincronizado (tabla System.Collections.Hashtable);

Aquí la tabla es la Hashtable que se sincronizará.
Valor de retorno: este método devuelve un contenedor sincronizado (seguro para subprocesos) para Hashtable.
Excepción: este método generará ArgumentNullException si la tabla es nula. 
Los siguientes programas ilustran el uso del método mencionado anteriormente:
Ejemplo 1:

CSharp

// C# code to get a synchronized (thread-
// safe) wrapper for the Hashtable
using System;
using System.Collections;
 
class GFG {
 
    // Main method
    static void Main(string[] args)
    {
 
        // create and initialize Hash table
        // using Add() method
        Hashtable has1 = new Hashtable();
        has1.Add("1", "Welcome");
        has1.Add("2", "to");
        has1.Add("3", "geeks");
        has1.Add("4", "for");
        has1.Add("5", "geeks");
 
        // Creating a synchronized packing
        // around the Hashtable
        Hashtable has2 = Hashtable.Synchronized(has1);
 
        // --------- Using IsSynchronized Property
 
        // print the status of both Hashtables
        Console.WriteLine("has1 Hashtable is {0}.",
            has1.IsSynchronized ? "synchronized" :
                              "not synchronized");
 
        Console.WriteLine("has2 Hashtable is {0}.",
             has2.IsSynchronized ? "synchronized" :
                               "not synchronized");
    }
}

Producción: 
 

has1 Hashtable is not synchronized.
has2 Hashtable is synchronized.

Ejemplo 2:

CSharp

// C# code to get a synchronized (thread-
// safe) wrapper for the Hashtable
using System;
using System.Collections;
 
class GFG {
 
    // Main method
    static void Main(string[] args)
    {
 
        // create and initialize Hash table
        // there will be no elements
        Hashtable has1 = new Hashtable();
 
        // it will give runtime error as
        // table parameter can't be null
        Hashtable has2 = Hashtable.Synchronized(null);
    }
}

Error de tiempo de ejecución:
 

Excepción no controlada: 
System.ArgumentNullException: el valor no puede ser nulo. 
Nombre del parámetro: tabla 
 

Nota:

  • Este método es seguro para subprocesos para múltiples lectores y escritores. Además, el envoltorio sincronizado garantiza que solo haya un escritor escribiendo a la vez.
  • Enumerar a través de una colección no es intrínsecamente un proceso seguro para subprocesos. Otros subprocesos aún pueden modificar la colección, lo que hace que el enumerador arroje una excepción incluso cuando una colección está sincronizada.
  • Para garantizar la seguridad de los subprocesos durante la enumeración, puede bloquear la colección durante toda la enumeración o detectar las excepciones resultantes de los cambios realizados por otros subprocesos.
  • Este método es una operación O(1).

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 *